不清楚的复杂正则表达式

时间:2014-06-25 12:58:05

标签: regex

我是正则表达式的新手,偶然发现了一个我不太懂的表达方式。 表达式是:

.*[^0-9](?P<ref>[0-9]{3})[^0-9].*

我认为我理解了第一部分和最后一部分,但括号内的部分使我无法理解。我将非常感谢一个解释或一些链接,我可以找到帮助。 感谢。

2 个答案:

答案 0 :(得分:3)

括号内的部分是named capturing group,它恰好匹配三位数(并允许该组由名称ref引用)。添加此功能是因为在非常复杂的表达式中,使用命名组比通常编号的组更清晰(需要计算括号以查看哪个组是哪个)。

命名捕获引用的确切方式取决于正则表达式库和/或使用的语言。例如,在Python中:

>>> import re
>>> match = re.search(r'.*[^0-9](?P<ref>[0-9]{3})[^0-9].*', 'a234b')
>>> match.group('ref')
'234'

答案 1 :(得分:0)

这是您表达的简短图解说明:

.*[^0-9](?P<ref>[0-9]{3})[^0-9].*

Regular expression visualization

Debuggex Demo

用语言说:

  • .*匹配任意数量的字符
  • [^0-9]匹配一个不是数字的字符
  • (?P<ref>[0-9]{3})匹配一组三个数字,并在结果中为组提供名称​​ ref
  • [^0-9] ......显而易见
  • .* ......显而易见