【发布时间】:2017-10-09 21:01:47
【问题描述】:
我正在尝试编写一个匹配数字或数字和尾随字符串的正则表达式模式。所以 match 应该输出:
Matching "string100": [('100', '')]
Matching "string900_TYPE": [('900', 'TYPE')]
但相反,我得到:
Matching "string100": [('100', '')]
Matching "string900_TYPE": [('900', ''), ('', 'TYPE')]
想法是将数字作为元组中的第一项,将“TYPE”作为第二项,这样我就可以轻松确定元组中是否存在“TYPE”(第二个元组项为空--> '')。
代码:
import re
stringList = ["string100", "string900_TYPE"]
pattern = r"(\d{3})|\w(TYPE)"
for string in stringList:
match = re.findall(pattern, string)
print('Matching "' + string + '":\t', match)
提前致谢。
【问题讨论】:
-
像这样:
(\d{3})(?:_(\w+))?。不要使用交替,描述完整的字符串。 -
@CasimiretHippolyte:做到了。谢谢!
-
该模式实际上可以简化为
+(\d{3})_?(\w+)?,这需要更少的正则表达式引擎步骤。是否有任何理由在子组(\w+)周围使用非捕获组? -
如果你使用
(\d{3})_?(\w+)?(注意不能以+开头)那么你也可以匹配123_。(\d{3})(?:_(\w+))?在这里是最好的,因为(?:_(\w+))?使整个模式序列可选。 -
+一定是不知何故溜进来了……不过,123_似乎没有被捕获。
标签: python regex capture-group