【问题标题】:Exclude word between other two as regexp将其他两个之间的单词排除为正则表达式
【发布时间】:2019-03-18 21:25:05
【问题描述】:

我有模式

\\bi\\b[^.!?]{0,10}\\bhate

仅匹配一个句子中的字符串(不除以 .!? )。但它也与两个词之间的not 相匹配。如何在最大距离为 10 的两个单词之间排除 not 的出现。

现在匹配:i do not hate。我想排除它,只留下匹配项,例如 i do hatei hate

【问题讨论】:

  • 这个[^.!?]{0,10}必须在{1,10}之间
  • \bi\b(?:(?!\bnot\b)[^.!?]){1,10}\bhate\b, demo.

标签: java regex text


【解决方案1】:

您将在否定断言中排除 not
为 NOT 在前 10 个字符内的长度量身定制。
IE。范围是 10 - length('not') 或 {0,7}

\bi\b(?!.{0,7}not)[^.!?]{0,10}\bhate

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

 \b i \b                       # 'i'
 (?! .{0,7} not )              # Here, exclude 'not' if within the first 7 characters     
 [^.!?]{0,10} \b               # O - 10 characters within this negated class
 hate

【讨论】:

  • 感谢这些细节,但 3 位数的长度对我来说并不重要。只需要排除否定
  • @SergeyAleshkinAlyoshkin - 我对'not' 的长度做了太大的交易吗?抱歉,您对单词between two words with maximum distance 10 between them 之间的长度做了很大的调整。也许您不太关心单词之间的长度。我想你可以这样做^i (?!.*not).*hate$
猜你喜欢
  • 1970-01-01
  • 2013-12-02
  • 2020-06-09
  • 2020-08-03
  • 1970-01-01
  • 2016-05-09
  • 2017-03-13
  • 2020-09-03
  • 1970-01-01
相关资源
最近更新 更多