正则表达式:查找特定字符串后的所有数字

AKS

我正在尝试从单词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在上面的示例中。

威克多·斯特里比尤

我建议抓住所有的子串用数字后,classclasses/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']

IDEONE演示

由于\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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式选择字符串后的所有数字

使用正则表达式查找输入字符串中的所有数字序列(任意长度)

正则表达式(PCRE):匹配存在字符串的所有数字

正则表达式在特定子字符串后查找数字

正则表达式-查找具有特定字符串的所有注释

需要正则表达式来查找特定模式的所有子字符串

正则表达式-查找某个字符出现的所有数字

正则表达式删除所有数字和带空字符串的点

正则表达式,用于捕获和替换字符串中的所有数字(特殊模式除外)

正则表达式替换字符串中所有数字的格式相同(Oracle)

如何使用正则表达式获取某些字符后的所有数字

正则表达式删除特定字符之前的所有数字(在R中工作)

正则表达式验证带有数字和字母的字符串

正则表达式-在特定字符之前的字符串中查找各种数字

Java正则表达式查找在其前后没有字母数字字符的特定子字符串

查找所有字符串的正则表达式是在Java中以$开头的正则表达式

正则表达式在字符串后查找数字

PHP正则表达式:查找字符串中所有连续的数字序列吗?

无法获取正则表达式来查找特定的字符串和关联的数字

使用正则表达式查找字符串中不包含特定字母的所有单词

在javascript中使用正则表达式查找所有出现但不包括特定字符串的事件

正则表达式查找以特定字符串开头的行中的所有空格

正则表达式,选择特定字符串后的数字

正则表达式获取特定字符串后的数字(忽略换行符)

正则表达式:查找文本中的所有子字符串

正则表达式查找某些模式之间的所有字符串

使用正则表达式在字符串中查找所有出现的日期

用正则表达式查找字符串中的所有字母

Vim查找并替换所有出现的正则表达式字符串