【问题标题】:Regex - Match sentence avoiding parentheses正则表达式 - 匹配句子避免括号
【发布时间】:2018-08-02 16:17:14
【问题描述】:

我需要制作一个正则表达式来匹配大文本中的关键字。

大文本的示例如下:

...另一个句子结尾关键字:标签1,标签2,标签3(可能包含 像这样的参考。 1)、tag 4和tag 5。另外一句话 已经开始了……

正则表达式必须提取:

关键字:标签 1、标签 2、标签 3(可能包含 类似的东西参考。 1)、标签4和标签5

我有以下代码:

\bKeywords:[^\.]+

但问题是正则表达式没有避免括号内的文本,而是以“..ref. 1..”上的点停止。

谢谢大家!

注意:单词“tag”是一个例子,它可以是任何单词。

【问题讨论】:

  • 你能试试这个Keywords: (tag \d\s?(\(.*\))?(,|and)?\s?)+吗?
  • 首先感谢您的回复! “标签”这个词是一个例子,它可以是任何词。
  • 所以这应该有效吗? Keywords: (.+ \d\s?(\(.*\))?(,|and)?\s?)+
  • 它不起作用:/ 这里有一个大文本的真实示例:... 关键词:吸收、ASTM 规范、硅酸钙砖、抗压强度、混凝土砖、尺寸、面壳和腹板厚度、总面积、净面积、规格、测试、吸水率 2012 年国际建筑规范 (IBC) 版本(参考 1),以及最新的 ASTM 版本。代码官员通常会...
  • 试试\bKeywords:.*(?=\.\s[A-Z])

标签: regex keyword parentheses sentence


【解决方案1】:

假设括号不能嵌套:Keywords: (?:[^(.]|\([^)]*\))*

我正在匹配:

(?:[^(.]|\([^)]*\))*
                   * as many times as possible
(?:               )  non-capturing
        |            either:
   [^(.]             a character that's not an opening paranthesis or a dot, or
         \(     \)   inside literal parantheses
           [^)]*     as many characters that aren't closing parantheses as possible

如果括号可以嵌套,那么正则表达式不是你想要的,因为你试图捕获的语言是context-free

【讨论】:

  • 有效!谢谢你和其他试图帮助我的人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多