我有一个带有regex模式的Python脚本,如果单词employee_id
的前面或后面有等号,则搜索该单词。
import re
pattern = r"(=employee_id|employee_id=)"
print(re.search(pattern, "=employee_id").group(1)) # =employee_id
print(re.search(pattern, "employee_id=").group(1)) # employee_id=
print(re.search(pattern, "=employee_id=").group(1)) # =employee_id
print(re.search(pattern, "employee_id")) # None
print(re.search(pattern, "employee_identity=")) # None
如何修改正则表达式模式,使其只捕获字符串中不带等号的employee_id
部分?
# Desired results
print(re.search(pattern, "=employee_id").group(1)) # employee_id
print(re.search(pattern, "employee_id=").group(1)) # employee_id
print(re.search(pattern, "=employee_id=").group(1)) # employee_id
print(re.search(pattern, "employee_id")) # None
print(re.search(pattern, "employee_identity=")) # None
我尝试使用捕获组,但是在employee_id
周围加上括号意味着我的结果在两个捕获组之间拆分:
pattern = r"=(employee_id)|(employee_id)="
print(re.search(pattern, "employee_id=").group(1)) # None
print(re.search(pattern, "employee_id=").group(2)) # employee_id
使用可选组将匹配没有任何等号的employee_id
。
(?:=)?(employee_id)(?:=)?
我也不想exclude matches where the character is both before and after the word。
3条答案
按热度按时间lawou6xi1#
试试看:
Regex demo.
或者,如果您希望它在捕获组内匹配
Regex demo.
如果在字符串之前或之后存在
=
,则匹配employee_id
编辑:Python示例:
图纸:
或者:您可以在模式周围添加捕获组:
您可以在模式周围放置捕获组:
图纸:
yws3nbqq2#
如果只希望有一个捕获组,同时确保
=
在捕获组之前或之后,请用途:RegEx Demo
RegEx详细信息:
(?:
:非捕获组启动(?<==)
:Assert在当前位置之前有=
|
:或(?=\w+=)
:Assert在当前位置之后有1个以上单词字符和=
)
:非捕获组结束(employee_id)
:匹配并捕获employee_id
\b
:字边界dly7yett3#
这可能比实际需要的更复杂,但这是一种选择。
Python的
re
支持命名组,所以我们希望这能起作用:不幸的是,事实并非如此,尽管两个群体永远不会发生冲突。
但是,这适用于第三方
regex
包:如果想使用
re
,可以使用一个helper函数,并对该模式做一些细微的修改: