正则表达式中有词边界的多个断言

时间:2020-07-24 16:47:31

标签: regex

我正在尝试使用单词边界编写正则表达式模式。我想搭配这样的东西 匹配\b(\d+)\/(\d+)\b的{​​{1}},尽管我不想匹配小数3/4 2/3 1/2旁边的数字,但我希望此无效。我知道我可以使用3 2/3,所以它^some pattern...$无效。虽然,我希望能够在一行中有多个匹配项,这就是为什么我使用单词边界。我想要类似3 2/3的内容,其中只有3/4 2 2/3 hello 4/5 some text有效。我该如何使用正则表达式来做到这一点?

1 个答案:

答案 0 :(得分:2)

当您已经在使用捕获组时,可以匹配一个数字,然后是您不想保留的分数。

然后交替使用,并捕获要保留的整个组中的小数部分。

您的值在组1中。

\b\d+ +\d+\/\d+\b|\b(\d+\/\d+)\b

说明

  • \b\d+ +\d+\/\d+\b匹配1个以上的数字,后跟一个小数
  • |或在第1组骨折中捕获
  • \b(\d+\/\d+)\b

Regex demo


如果支持使用量词进行环视,则另一种选择是匹配分数并断言直接在左边不是1+位的数字,然后是一个在左边本身具有空白边界的空格。

(?<!(?<!\S)\d+ +)\b\d+\/\d+\b

Regex demo


注意,如word boundaries所指出的,关于使用@CarySwoveland \b的原因是分数将在a7 3/4中匹配,而在{ {1}},因为agent:7 3/4a之间没有单词边界,并且7:之间没有单词边界。看到这个regex demo