我正在尝试从单词classes
(或其变体)之后的字符串中获取所有数字
Accepted for all the goods and services in classes 16 and 41.
预期输出:
16
41
我有多个遵循此模式的字符串以及其他一些字符串,例如:
classes 5 et 30 # expected output 5, 30
class(es) 32,33 # expected output 32, 33
class 16 # expected output 5
到目前为止,这是我尝试过的:https : //regex101.com/r/eU7dF6/3
(class[\(es\)]*)([and|et|,|\s]*(\d{1,}))+
但是我只能得到最后一个匹配的数字,即41
在上面的示例中。
我建议抓住所有的子串用数字后,class
或classes
/class(es)
和,然后让所有从这些数字:
import re
p = re.compile(r'\bclass(?:\(?es\)?)?(?:\s*(?:and|et|[,\s])?\s*\d+)+')
test_str = "Accepted for all the goods and services in classes 16 and 41."
results = [re.findall(r"\d+", x) for x in p.findall(test_str)]
print([x for l in results for x in l])
# => ['16', '41']
由于\G
不支持构造,也无法使用Pythonre
模块访问捕获堆栈,因此无法使用您的方法。
但是,您可以像使用PyPi regex module一样进行操作。
>>> import regex
>>> test_str = "Accepted for all the goods and services in classes 16 and 41."
>>> rx = r'\bclass(?:\(?es\)?)?(?:\s*(?:and|et|[,\s])?\s*(?P<num>\d+))+'
>>> res = []
>>> for x in regex.finditer(rx, test_str):
res.extend(x.captures("num"))
>>> print res
['16', '41']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句