【问题标题】:using lookahead and lookbehind with or ( | )使用带有或 (|) 的前瞻和后瞻
【发布时间】:2021-05-22 18:33:57
【问题描述】:

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

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

这是我写的以下正则表达式: (?

我也试过这个:

((?

但前后空格的连字符也匹配。 (不应该这样)

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

【问题讨论】:

  • 你的意思是你在([.([\]!):,+"\\/-])(?!(?<=\s.)\s)之后?见demo。或者,(?<!\s)[.([\]!):,+"\\/-]|[.([\]!):,+"\\/-](?!\s)
  • (?<!\s)([-.(\[\]!\):,+\/])(?!\s) - 这对我有用。
  • @WiktorStribiżew 是的,非常感谢!,请您向我解释一下我做错了什么吗?

标签: regex nlp regex-lookarounds


【解决方案1】:

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

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

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

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

查看regex demo #1regex demo #2

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多