Cee*_*man 2 python regex python-3.x
我只想到达['bar']这里:
>>> re.findall(r"(?<!\bdef )([a-zA-Z0-9.]+?)\(", "def foo(): bar()")
['oo', 'bar']
Run Code Online (Sandbox Code Playgroud)
这在单个正则表达式中可能吗?如果没有,我将首先使用这个:re.sub(r"\bdef [a-zA-Z0-9.]+", "", "def foo(): bar()")
当前正则表达式匹配ooinfoo因为oo(前面没有"def ".
要阻止模式在单词内匹配,您可以使用单词边界,\b修复方法可能如下所示r"\b(?<!\bdef )([a-zA-Z0-9.]+?)\("。
请注意,标识符可以与 匹配[a-zA-Z_][a-zA-Z0-9_],因此可以增强您的模式,例如
re.findall(r'\b(?<!\bdef\s)([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)\(', s, re.A)
Run Code Online (Sandbox Code Playgroud)
请注意,re.Aorre.ASCII只会\w匹配 ASCII 字母、数字和_。
请参阅正则表达式演示。
细节
\b- 单词边界(?<!\bdef\s)-def当前位置左侧不允许有 + 空格([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)- 捕获组1(其值将是调用的结果re.findall):
[a-zA-Z_]- 一个 ASCII 字母或_\w*- 1+ 个单词字符(?:- 匹配一系列...的非捕获组的开始
\.- 一个点[a-zA-Z_]- 一个 ASCII 字母或_\w*- 1+ 个单词字符)*- ...零次或多次\(- 一个(字符。| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |