Python 正则表达式在关键字后匹配多个数字
我有一个关于在Python下编写正则表达式的问题 字符串为:Python 正则表达式在关键字后匹配多个数字,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个关于在Python下编写正则表达式的问题 字符串为: abc rules 2.3, 4.5, 6.7, 8.9 and def rules 3.6, 6.7, 8.9 and 10.11. 我的目标是尝试使用一行正则表达式来捕获所有数字 此外,我想把数字分成不同的组2.3、4.5、6.7、8.9应在集团abc规则下,而3.6、6.7、8.9和10.11将在def规则下 我尝试使用正则表达式: (?您可以使用 import re rx = r"\b(?:abc|def)\s+rules\
abc rules 2.3, 4.5, 6.7, 8.9 and def rules 3.6, 6.7, 8.9 and 10.11.
我的目标是尝试使用一行正则表达式来捕获所有数字
此外,我想把数字分成不同的组<代码>2.3、4.5、6.7、8.9应在集团abc规则下,而3.6、6.7、8.9和10.11将在def规则下
我尝试使用正则表达式:
(?您可以使用
import re
rx = r"\b(?:abc|def)\s+rules\s+(\d*\.*?\d+(?:(?:,|\s*and)\s*\d*\.*?\d+)*)"
s = "abc rules 2.3, 4.5, 6.7, 8.9 and def rules 3.6, 6.7, 8.9 and 10.11."
print([re.split(r'\s*(?:,|\band\b)\s*', x) for x in re.findall(rx, s)])
# => [['2.3', '4.5', '6.7', '8.9'], ['3.6', '6.7', '8.9', '10.11']]
见
关键是,您可以将子字符串与数字匹配,捕获数字部分,然后使用\s*(?:,|\band\b)\s*
regex拆分后一部分
这将匹配所有子字符串:
\b(?:abc|def)\s+rules\s+(\d*\.*?\d+(?:(?:,|\s*and)\s*\d*\.*?\d+)*)
见
详细信息:
\b
-单词边界
(?:abc|def)
-要么abc
要么def
\s+
-1个或多个空格
规则
-子字符串规则
\s+
-1个或多个空格
(\d*\.\d+(?:(?:,|\s*和)\s*\d*\.*?\d+*)
-第1组捕获:
\d*\.\d+
-一个整数或浮点数
(?:(?:,|\s*和)\s*\d*\.*?\d+*
-零个或多个序列:
(?:,|\s*和)
-,
或0+空格,然后是和
\s*
-0+空格
\d*\.*?\d+
-整数或浮点数
\s*(?:,|\band\b)\s*
正则表达式匹配一个逗号或一个完整的单词,并用0+空格括起来。它不知道在,
后继续进行。你可以做一些类似的事情,(?:\d{1,2}.\d{1,2}(?,)+
然后可以在,
上拆分以获得每个引用。(?@YichengWang:我认为一行正则表达式解决方案对于Pythonre
这样复杂的需求不是一个好主意。你可以使用(已经是一个复杂的模式),一旦找到匹配项,你可以使用\s*(?:,|\band\b)\s*
,请参见。打印([re.split(r'\s*(?:,|\band\b)\s*),x)在re.findall(rx,s)]
也是一种单行代码:)@WiktorStribiżew谢谢!你说得对,单行正则表达式不是解决问题的最佳方法。