【问题标题】:Regex function that finds patterns of all lengths?查找所有长度模式的正则表达式函数?
【发布时间】:2020-04-12 10:01:52
【问题描述】:

如何创建一个匹配单个字符作为一个组以及重复序列的正则表达式?

这是我找到的(不是我自己制作的):https://regex101.com/r/Vdhjld/1

正则表达式是

((?P<X>\S.*?)(?:, (?P=X))+)

字符串是

1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 5, 2, 5, 1

我希望它能够在字符串末尾获得单个 Group 'X'。现在它只返回 1, 2, 3, 1, 2, 3, 1, 2, 32, 5, 2, 5 作为完整匹配,但我希望它返回 1 以及完整匹配。我该怎么做?

【问题讨论】:

  • ((?P&lt;X&gt;\S.*?)(?:, (?P=X))+)|(\d+(?=,|])) 之类的怎么样?
  • 对于数字?使用 ([0-9]+)(, [0-9]+)* first group 是必须的第一个元素。第二组匹配 0 个或多个(逗号、空格、数字)
  • 你的意思是这样吗? ((?P&lt;X&gt;\S.*?)(?:, (?P=X))+|[^\s,[\]])regex101.com/r/jf198X/1
  • 我认为您只能使用其他人编写的替代方法来实现这一点。由于正则表达式希望尽可能地匹配,即使使用所有格或控制动词也不会给你想要的结果。

标签: python regex python-3.x string regex-greedy


【解决方案1】:

您可以使用alternation 来匹配您的原始模式或使用否定字符类[^\s[\]] 来匹配除空白字符、[] 或逗号以外的任何字符

((?P<X>\S.*?)(?:, (?P=X))+|[^\s,[\]])

Regex demo

【讨论】:

  • 感谢您的回答,工作完美。但是我想知道是否有办法做到这一点,以便将36, 21, 1 读取为三个项目/值,因此 36 是一个值,21 是一个,依此类推。这样Group 1 = 36.
  • @DenFulaAnkungen 您可以将字符类重复 1 次或多次 regex101.com/r/1R1ECV/1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2013-10-27
相关资源
最近更新 更多