gpt4 book ai didi

Python 正则表达式示例

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:32 25 4
gpt4 key购买 nike

我对 Python 正则表达式很烂,很想看到一些已解决的示例来帮助我理解。我正在尝试使用 http://pyregex.com/这很棒,但需要一些“好的”例子来帮助我开始。

我尝试创建一组如下规则:

rules = [('name', r'[a-z]+'),
('operator', r'[+-*\]']

我有found但没有足够的信心为下面列出的情况创建自己的正则表达式:

  1. 仅匹配 =+=*= 字符
  2. + 字符(即上面看到的 operator)与 ++ 字符分开匹配
  3. 匹配特定关键字(例如 int)之后的任何一个单词以及任意数量的空格和/或制表符。 [已编辑 - 最初遵循的是错误的]

对于1.我已经尝试了[\+=|=],对于2.我知道规则中的顺序很重要,对于3.我完全迷失了[ ] 以及我如何概括这种情况,使其不仅适用于 int,也适用于 float

任何代码示例将不胜感激,因为我才刚刚开始使用 Python 和编码!

最佳答案

match only the = or += or *= characters

r'[+*]?='

[+*]?=由一个可选的原子、一个字符类 [+*] 组成匹配 +* , ? - 一次或零次,以及文字 =象征。为什么不r'\+=|\*=|=' ?可选字符类解决方案不仅更短,而且更高效:当您使用交替时,总是会涉及更多冗余回溯。您还需要注意以正确的顺序放置替代项,以便最长的首先出现(尽管这并不总是保证最长的将匹配(取决于分支子模式),或者如果有的话,顺序并不重要交替组两侧的 anchor )。

match the + character (i.e the operator as seen above) separately from the ++ characters

r'(?<!\+)\+(?!\+)'

此模式与文字 + 匹配(因为它被转义了)并且只有在它前面既没有另一个加号(请参见负向后看 (?<!\+) )也没有后面有另一个加号(请参见正向前看 (?!\+) )的情况下。环视是非消耗性的,即,当正则表达式检查前面是否有加号时,正则表达式索引保留在加号之前,而当检查后面是否有加号时,正则表达式索引保留在加号之后。字符(或字符串位置的开始/结束)不会作为匹配的一部分返回(这就是为什么它们被称为零宽度非捕获模式)。

match any one word after a specific keyword (e.g. int) and any number of space(s) and/or tabs.

r'\bint\b(?=\s+\w+\s+)'

如果您阅读了上面的解释,您会在这里认识到另一个零宽度断言:(?=\s+\w+\s+)是一个积极的前瞻,检查是否是整个单词 int (如 \b 匹配单词边界位置)后跟 1+ 空格,然后是 1+ 单词字符,然后又是 1+ 空格。

关于Python 正则表达式示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36552516/

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