gpt4 book ai didi

python - 正则表达式匹配关键字后的多个数字

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:55 24 4
gpt4 key购买 nike

我有一个关于在 Python 下编写 Regex 的问题。

字符串是:

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 rules 下和 3.6, 6.7, 8.9 and 10.11将在 def rules 下.

我尝试使用正则表达式: (?<=abc rules) \d{1,2}.\d{1,2}捕获 abc 规则后的所有数字,但我只能得到第一个数字。

我怎样才能实现目标?

谢谢大家!

最佳答案

你可以使用

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']]

参见 Python demo

重点是,您可以将子字符串与数字匹配,只捕获数字部分,然后使用 \s*(?:,|\band\b)\s* 正则表达式。

这匹配所有子字符串:

\b(?:abc|def)\s+rules\s+(\d*\.*?\d+(?:(?:,|\s*and)\s*\d*\.*?‌​\d+)*)

参见 regex demo

详细信息:

  • \b - 单词边界
  • (?:abc|def) - abcdef
  • \s+ - 1 个或多个空格
  • rules - 子串 rules
  • \s+ - 1 个或多个空格
  • (\d*\.*?\d+(?:(?:,|\s*and)\s*\d*\.*?‌\d+)*) - 第 1 组捕获:
    • \d*\.*?\d+ - 整数或 float
    • (?:(?:,|\s*and)\s*\d*\.*?‌\d+)* - 零个或多个序列:
      • (?:,|\s*and) - , 或 0+ 个空格,然后是 and
      • \s* - 0+ 个空格
      • \d*\.*?‌\d+ - 整数或 float

\s*(?:,|\band\b)\s* 正则表达式匹配逗号或整个单词 and 并包含 0+ 个空格。

关于python - 正则表达式匹配关键字后的多个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com