我必须找到一个遵循特定格式的文件中的所有数字.格式如下:
每个数字都是正数或负数(符号可能存在也可能不存在,小数点前有一个或多个数字,小数点后有一个或多个数字).可能没有小数位.每个数字前后都可以有空格.两个数字用逗号(,)或分号(;)或冒号(:)分隔.例如(35.3,52.23; -623,623.62:-52,65)
所以在上面的例子中,我想列出六个数字.要搜索的数字列表在括号之间.到目前为止,我的代码如下所示:
def number_processing( file_location ):
""""""
import re
file_variable = open( file_location )
lines = file_variable.readlines()
numbers = re.compile(r'[(] *[+]?[-]?[0-9][0-9]*[.]+[,]+[;]+[0-9][0-9]* *[)]')
numbers_list = []
for line in lines:
for word in line.split(" "):
match = numbers.match(word)
if match:
numbers_list.append(match.group())
print numbers_list
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏!
我不认为你需要使用str.split,如何使用re.findall?
>>> s = '35.3 , 52.23; -623, 623.62 : -52,65'
>>> re.findall(r'[-+]?\d+(?:\.\d*)?', s)
['35.3', '52.23', '-623', '623.62', '-52', '65']
Run Code Online (Sandbox Code Playgroud)
编辑:要仅在括号对内搜索,您可以编写另一个正则表达式来首先查找它们,然后重复使用上面的那个:
>>> s = '(23432.434 , 32423, -4343; 343) 5555 (3244, 45445; -4545 )'
>>> for s_ in re.findall(r'\(.*?\)', s):
... re.findall(r'[-+]?\d+(?:\.\d*)?', s_)
...
['23432.434', '32423', '-4343', '343']
['3244', '45445', '-4545']
Run Code Online (Sandbox Code Playgroud)
要在列表理解中加入所有上述子列表:
>>> s = '(23432.434 , 32423, -4343; 343) 5555 (3244, 45445; -4545 )'
>>> pat1 = re.compile(r'\(.*?\)')
>>> pat2 = re.compile(r'[-+]?\d+(?:\.\d*)?')
>>> [x for s_ in re.findall(pat1, s) for x in re.findall(pat2, s_)]
['23432.434', '32423', '-4343', '343', '3244', '45445', '-4545']
Run Code Online (Sandbox Code Playgroud)