首页 > 解决方案 > 使用带有或 (|) 的前瞻和后视

问题描述

我正在尝试匹配一些前后没有空格的特殊字符。

在此处输入图像描述

通常 ww 之前的连字符和 ww 之后的连字符应该匹配。

这是我写的以下正则表达式: (?<!\s)([.([]!):,+"\/-])(?!\s)

我也试过这个:

在此处输入图像描述

((?<!\s)|(?!\s))([.([]!):,+"\/-])

但是前后空格的连字符也匹配。(不应该是这种情况)

你能告诉我我做错了什么吗?感谢您的帮助 !

标签: regexnlpregex-lookarounds

解决方案


(?<!\s)([.([\]!):,+"\\/-])(?!\s)正则表达式前面没有空格或后面有空格时,正则表达式将失败特殊字符匹配。

((?<!\s)|(?!\s))([.([\]!):,+"\\/-])则表达式在前面没有空格时匹配特殊字符,或者要求特殊字符(与 匹配[.([\]!):,+"\\/-])不是空格字符((?!\s)消费模式之前限制此模式)。

您需要确保匹配失败,只有在两端都用空格字符括起来的情况下:

[.([\]!):,+"\\/-](?!(?<=\s.)\s)
(?<!\s)[.([\]!):,+"\\/-]|[.([\]!):,+"\\/-](?!\s)

请参阅正则表达式演示 #1正则表达式演示 #2

请注意[.([\]!):,+"\\/-](?!(?<=\s.)\s)匹配一个特殊的字符(带[.([\]!):,+"\\/-]),该字符后面没有紧跟一个空格的空格和任何一个字符(实际上,.用于简单地匹配此处的特殊字符)。

(?<!\s)[.([\]!):,+"\\/-]|[.([\]!):,+"\\/-](?!\s)模式匹配一​​个不紧跟在空格之前的特殊字符,或者将匹配一个不跟在空格后面的特殊字符。


推荐阅读