Eri*_*got 156 python regex regex-group
在Python中,(?P<group_name>…)
语法允许通过其名称引用匹配的字符串:
>>> import re
>>> match = re.search('(?P<name>.*) (?P<phone>.*)', 'John 123456')
>>> match.group('name')
'John'
Run Code Online (Sandbox Code Playgroud)
"P"代表什么?我在官方文档中找不到任何提示.
我很想知道如何帮助我的学生记住这种语法.知道"P"代表什么(或可能代表什么)会很有用.
DSM*_*DSM 228
既然我们都在猜测,我不妨放弃一下:我一直以为它代表Python.这可能听起来很愚蠢 - 什么,P for Python?!- 但在我的辩护中,我依稀记得这个帖子 [强调我的]:
主题:声明(?P ...)正则表达式语法扩展
来自:Guido van Rossum(gui ... @ CNRI.Reston.Va.US)
日期:1997年12月10日下午3:36:19
我对Perl开发人员(那些开发Perl语言的人)有一个不寻常的请求.我希望这个(perl5-porters)是正确的列表.我正在使用Python字符串sig,因为它是我在这里讨论的大部分工作的起源.
你可能知道Python.我是Python的创造者; 我计划在今年年底之前发布下一个"主要"版本Python 1.5.我希望Python和Perl可以在未来几年内共存; 异花授粉对两种语言都有好处.(我相信Larry在向Perl 5添加对象时很好地看了Python; O'Reilly出版了有关这两种语言的书籍.)
您可能知道,Python 1.5添加了一个新的正则表达式模块,它更接近地匹配Perl的语法.我们试图在Python的语法中尽可能接近Perl语法.但是,正则表达式语法有一些特定于Python的扩展,它们都以(?P开头).目前有两个:
(?P<foo>...)
与常规分组括号类似,但在
执行匹配后,可通过符号组名称"foo"访问组匹配的文本.
(?P=foo)
匹配与名为"foo"的组匹配的字符串相同的字符串.相当于\ 1,\ 2等,除了该组是
按名称引用,而不是数字.我希望这个特定于Python的扩展不会与Perl正则表达式语法的任何未来Perl扩展冲突.如果你有计划使用(?P,请让我们尽快知道,以便我们能够解决冲突. 否则,这将是很好,如果(?P语法可以永久的Python特定的语法扩展保留. (是有某种扩展注册表?)
拉里沃尔回答说:
[...]目前还没有注册表 - 你的是来自外部perl5-porters的第一个请求,所以这是一个相当低带宽的活动.(对不起,它上周甚至更低 - 我在互联网世界的纽约.)
无论如何,就我而言,你可能肯定有'P'与我的祝福.(显然Perl此时不需要'P'.:-) [...]
所以我不知道P的原始选择是由什么驱动的 - 模式?占位?企鹅? - 但你可以理解为什么我总是把它与Python联系起来.考虑到这一点(1)我不喜欢正则表达式并尽可能避免使用它们,以及(2)这个线程发生在十五年前,有点奇怪.
Mik*_*ike 18
图案!该组命名(子)模式以供以后在正则表达式中使用.有关如何使用此类组的详细信息,请参阅此处的文档.
小智 18
Python 扩展。来自 Python 文档:
Perl 开发人员选择的解决方案是使用 (?...) 作为扩展语法。? 紧跟在括号之后是语法错误,因为 ? 没有什么可重复的,所以这不会引入任何兼容性问题。紧跟在 ? 之后的字符 指示正在使用的扩展名,因此 (?=foo) 是一回事(正向前瞻断言),而 (?:foo) 是另一回事(包含子表达式 foo 的非捕获组)。
Python 支持多个 Perl 的扩展,并在 Perl 的扩展语法中添加了扩展语法。如果问号后面的第一个字符是 P,你就知道它是一个特定于 Python 的扩展
https://docs.python.org/3/howto/regex.html
归档时间: |
|
查看次数: |
97085 次 |
最近记录: |