首页 > 解决方案 > 使用 REGEX 忽略特定单词后需要文本

问题描述

我想在忽略某些关键词后提取单词。

我想忽略M/S提供 或提供的内容,直到行尾。

输入文本

汇款通知

本节包括由 M/S MOBIS INDIA LIMITED 提供的详细信息

本节包括由 MANDO AUTOMOTIVE INDIA LIMITED 提供的详细信息

本节包括由 MAHINDRA AND MAHINDRA AUTO SECTOR 提供的详细信息

预期产出

摩比斯印度有限公司

万都汽车印度有限公司

马欣德拉和马欣德拉汽车行业

我给了这样的东西

(?<=(由 M/S 提供。)|(由 M/S 提供。)).*

在这里感谢帮助。

标签: regex

解决方案


如果您只想要匹配,您可以使用环视,并可选择在后视中匹配M/S并断言在开始匹配时不会M/S

(?<=supplied by\s+(?:M/S\s+)?)\S(?<!\s+M(?=/S\s)).+

模式匹配:

  • (?<=积极的回顾
    • supplied by\s+匹配字面上后跟 1+ 个空格字符
    • (?:M/S\s+)?可选匹配M/S和 1+ 个空格字符
  • )近距离观察
  • \S匹配非空白字符
  • (?<!负面回顾
    • \s+M(?=/S\s)匹配 1+ 个空白字符,M并断言S后跟一个空白字符
  • )近距离观察
  • .+匹配任何字符 1 次以上

.NET 正则表达式演示

另一种编写方式可能是匹配 1+ 个非空白字符,然后在右侧断言空白边界,然后直接在左侧断言不是M/S

(?<=supplied by\s+(?:M/S\s+)?)\S+(?!\S)(?<!M/S).+

查看另一个.NET 正则表达式演示

另一种选择是使用捕获组:

\bsupplied by(?:\s+M\/S)?\s+(.+)

正则表达式演示


推荐阅读