如果匹配特定条件,如何 select 正则表达式中的特定字符

How to select a specific character in regex if it match certain conditions

我正在尝试从字符串中查找破折号 ​​-,前提是它符合特定条件并且正则表达式只应选择破折号。

应选案例-

  1. 如果双方都有space。示例:test - dash
  2. 如果右手边有space。示例:test- dash
  3. 如果双方都没有space。示例:test-dash

不应选择的情况

  1. 如果右边没有space,但是左边有space。示例:test -dash

这是我的进度

如截图所示,我可以用positive-lookbehind实现,但这并没有得到广泛支持。

所以,我的问题是,是否有另一种方法可以在不使用 positive-lookbehind 的情况下实现这一目标?

谢谢。

这应该有效:

\S+( ?)-(| )\S+

https://regex101.com/r/XI6W4R/1

它使用第一个捕获组来知道破折号之前是否有space。如果有,则破折号后必须有一个 space。否则,破折号后的 space 是可选的。

反向引用比正向后视得到更广泛的支持(根据此Regular Expression Engine Comparison Chart)。


I'm trying to ONLY have the - selected. instead of the whole thing

在这种情况下,我的知识仅限于提供以下正则表达式的使用

\S+( ?)(-)(| )\S+

并使用捕获组 2 查找破折号。如果不知道使用此正则表达式的确切方式,也很难提供更好的建议。

https://regex101.com/r/XI6W4R/2

您可以使用

-(?!(?<=\s-)\S)

参见regex demo

详情:

  • - - 一个连字符
  • (?!(?<=\s-)\S) - 后面没有紧跟着一个非白色的 space 字符(也就是说,右边必须有一个 space 或字符串结尾)反过来,紧接在白色 space 和 - 字符之前。

对于示例数据,如果您不能使用后视,也许使用单词边界就足够了。

-(?=\s)|\b-(?=[^\s-])

说明

  • -(?=\s) 匹配 - 并在右侧声明一个空白字符
  • |
  • \b-(?=[^\s-]) 字边界,匹配 - 并在右侧断言除 -
  • 之外的非空白字符

Regex demo