正则表达式匹配字符周围的字符,正则表达式中的AND运算符?
Posted
技术标签:
【中文标题】正则表达式匹配字符周围的字符,正则表达式中的AND运算符?【英文标题】:regex matching characters AROUND a character, AND operator in regex? 【发布时间】:2021-08-14 20:30:15 【问题描述】:在正则表达式方面我并没有那么令人印象深刻......
我试图匹配一个单词中除了第二个字符之外的所有字符。
我想匹配 '&' 和 'uml' 但不是字符串中的第二个字符。
示例字符串:
ä &zuml ö ë
我想出了以下两个正则表达式。
这个匹配“uml”除了第一个字符(&):
(?=.)uml
--> https://regex101.com/r/yrhzSU/1
这匹配除最后 3 个 (uml) 之外的第一个字符
&(?=.)
--> https://regex101.com/r/LgRtd3/1
您认为将这些组合起来很容易,但我正在努力寻找任何类型的 AND 运算符。我可以使用 OR (|) 运算符,但它也可以匹配不严格以 '&' 开头并以 'uml' 结尾的字符串。
&(?=.)uml
使用 OR 组合链接到正则表达式:https://regex101.com/r/MuhxM9/1
【问题讨论】:
你可以做的是使用 2 个捕获组而不是(&)[aeoz](uml)
regex101.com/r/tIXxHk/1
嗨@Thefourthbird,我相信这个表达式也会匹配第二个字符。我正在尝试匹配第一个字符 (&) 和字符 3,4 和 5。不过,您可能让我朝着正确的方向前进,我会尝试使用它。谢谢!
它确实匹配第二个字符,但你不能在这样匹配时真正跳过一个字符。这样你就有了 2 个捕获组。
您将如何处理捕获的数据?如果您只是输出它并且保证&
,则在输出时手动添加&
前缀。如果 &
可以是 $
之类的其他名称,那么您需要使用捕获组并将组 1 连接到组 2,每个 @Thefourthbird 的示例。
嗨@MonkeyZeus,我的目标是使用-replace 来删除这些匹配的字符,例如我想将“&aum”变成“a”
【参考方案1】:
结合使用积极的前瞻和后瞻,我相信您可以实现这一目标
&(?=.uml)|(?<=&.)uml
Regexr
解释:
&(?=.uml)
匹配 &
后跟 .uml
但不包括 .uml
匹配
(?<=&.)uml
匹配 &.
(不包括在匹配中,因为它在后视中)后跟 uml
。
希望这会有所帮助
编辑:我删除了@The fourth bird 指出的不必要的捕获组
【讨论】:
请注意,您不需要捕获组,您可能会使模式更具体&(?=[aeoz]uml\b)|(?<=&[aeoz])uml\b
【参考方案2】:
关于您尝试过的模式:
使用(?=.)uml
将始终匹配uml
,因为正向前瞻断言直接在右侧的是任何字符(即u
,因此您可以省略前瞻)
使用&(?=.)
匹配与号,并断言右边有任何字符
使用&(?=.)uml
将不会匹配任何内容,因为前瞻是一个非消耗性断言,并且断言(不匹配)uml 之前的字符)
如果要进行替换,请将&aum
转换为a
而不是使用环视,您可以匹配与号,捕获a
e
o
或z
中的1 个使用字符类在第 1 组中并匹配以下放大器
在替换使用捕获组 1 保留您捕获的内容。
&([aeoz])uml\b
查看regex demo
【讨论】:
以上是关于正则表达式匹配字符周围的字符,正则表达式中的AND运算符?的主要内容,如果未能解决你的问题,请参考以下文章