1

我试图-从字符串中找到一个破折号,如果它符合某些条件并且只有破折号应该由正则表达式选择。

应该选择的案例 -

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

不应该选择的情况

  1. 如果右侧没有空间,但左侧有空间。例子:test -dash

这是我的进步

在此处输入图像描述

如屏幕截图所示,我可以使用 来实现positive-lookbehind,但这并未得到广泛支持。

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

谢谢。

4

3 回答 3

0

这应该有效:

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

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

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

反向引用比正向回溯得到更广泛的支持(根据这个正则表达式引擎比较图表)。


我试图只选择 - 。而不是整个事情

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

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

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

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

于 2021-01-22T04:04:18.457 回答
0

您可以使用

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

请参阅正则表达式演示

详情

  • -- 一个连字符
  • (?!(?<=\s-)\S)- 后面不紧跟非空白字符(即右侧必须有一个空格或字符串结尾),也就是说,紧跟在其前面的是空白和-字符。
于 2021-01-22T09:48:15.653 回答
0

对于示例数据,如果您不能使用lookbehind,那么使用单词边界可能就足够了。

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

解释

  • -(?=\s)匹配-并断言右侧的空白字符
  • |或者
  • \b-(?=[^\s-])单词边界,匹配-并在右侧断言一个非空白字符,除了-

正则表达式演示

于 2021-01-22T11:41:29.333 回答