import re
list = []
string = "[50,40]"
print(string)
for line in string.split(","):
print(line)
match = re.search(r'\d[0-9]', line)
print(match)
if match:
list.append(match)
print("list is", list)
列表是:
[<_sre.SRE_Match object; span=(1, 3), match='50'>,
<_sre.SRE_Match object; span=(0, 2), match='40'>]
我想只匹配40和50而不是其他一些无用的信息,比如
[<_sre.SRE_Match object; span=(1, 3),
<_sre.SRE_Match object; span=(0, 2),]
如何避免其他事情,只匹配40和50
答案 0 :(得分:2)
使用True before {'val': True, 'x': 1}
1
True after
False before {'val': False}
Traceback (most recent call last):
File "o.py", line 11, in <module>
foo(False)
File "o.py", line 6, in foo
print(x)
UnboundLocalError: local variable 'x' referenced before assignment
功能,它将
返回字符串中所有非重叠的模式匹配,作为列表 字符串
re.findall
输出:
string = "[50,40]"
result = re.findall(r'\d+', string)
print(result)
答案 1 :(得分:0)
您的代码 与数字匹配,但您需要从Match对象中提取字符串。您可以使用.groups
方法执行此操作。
这是修复后的代码版本。我已经更改了一些名称,因为您不应该隐藏内置list
类型,string
也是标准模块的名称。
import re
lst = []
s = "[50,40]"
print(s)
for line in s.split(","):
print(line)
match = re.search(r'\d[0-9]', line)
print(match)
if match:
lst.append(match.group(0))
print("list is", lst)
<强>输出强>
[50,40]
[50
<_sre.SRE_Match object; span=(1, 3), match='50'>
40]
<_sre.SRE_Match object; span=(0, 2), match='40'>
list is ['50', '40']
你的正则表达式有点奇怪。如果仅想要匹配2位数字,则可以使用r'\d\d'
或r'\d{2}'
。如果您想匹配任何(非负面),您应该使用r'\d+'
。
你真的不需要做那个循环。只需使用re.findall
方法:
import re
s = "[50,40]"
lst = re.findall(r'\d+', s)
print("list is", lst)
如果您打算使用相同的模式进行大量搜索,那么使用已编译的正则表达式是个不错的主意。 re
模块无论如何编译和缓存所有正则表达式,但明确地执行它被认为是好的风格,并且更有效率。
import re
pat = re.compile(r'\d+')
s = "[50,40]"
lst = pat.findall(s)
print("list is", lst)