我是Python新手,使用的是3.8版本。我使用正则表达式来过滤字符串,特殊字符和数字。字符和数字之间有空格,我试图过滤它们。我可以过滤字符串直到第一个数字。我无法过滤字符串,直到最后一个数字。如果你能帮忙的话,我将不胜感激。提前感谢!
s = 'abc (efg): 2.1 296.2'
s1 = re.search(r'abc(\s+)\(efg\):(\s+)(\d+)',s)
print(s1.group())
o/p
abc (efg): 2
s = 'abc (efg): 2.1 296.2'
s1 = re.search(r'abc(\s+)\(efg\):(\s+)(\d+)(\s+)(\d+)',s)
print(s1.group())
o/p
print(s1.group())
AttributeError: 'NoneType' object has no attribute 'group'
4条答案
按热度按时间ttcibm8c1#
主要的问题是
\d
正在寻找一个数字,而不是一个小数。你有几个选择来解决这个问题。一种选择是,
See in action。
注:最后两个数字可能与格式不正确的数字匹配,例如:
1.2.3
等。这对你来说可能是个问题也可能不是如果没有更多的样本数据,我们无法判断。如果你想让它变得超级严格,
See in action。
ccgok5k52#
\d
语法只匹配整数值 0到9。\s+(?=\d)
,任何 * 空白 * 后跟数字(\S+)
,捕获任何连续的 * 非空白 * 字符这里有一个例子。
输出
6ju8rftf3#
它可能是你的正则表达式,试试这样:
yws3nbqq4#
你的正则表达式的问题是
\d+
不会匹配像2.1
或296.2
这样的浮点数。它不包括小数点。有关正则表达式匹配字符串中此类浮点数的示例,请参见下文。通过使小数点和后面的数字可选,它也将匹配一个整数。
然后可以将其合并到更大的正则表达式中。