Python:我正在尝试匹配数字,但它匹配其他东西

时间:2016-11-27 07:46:48

标签: python

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

2 个答案:

答案 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)