从字符串中提取一个词

时间:2018-12-20 13:47:31

标签: regex regex-negation

我正在使用REGEX,但找不到解决方案。 我有以下字符串:

LSUS_GDIS_SHIP_0211e947-1587-11de-9967-99f27557554e.txt
LSUS_GDIS_REC_0211e947-1587-11de-9967-99f27557554e.txt
LSUS_GDIS_CAPACITY_0211e947-1587-11de-9967-99f27557554e.txt

我需要匹配除SHIP或REC或CAPACITY以外的每一行。

我想出了

(?!.*\bSHIP\b|\bREC\b|\bCAPACITY\b).*

如何排除SHIP或REC或CAPACITY?当我这样做

(SHIP|REC|CAPACITY)

我只匹配这些字符串,但我想排除它们。

感谢您对此提出任何想法。

最诚挚的问候,彼得

2 个答案:

答案 0 :(得分:2)

使用正则表达式可以将每一行分为三部分

([A-Z_]+)(SHIP|REC|CAPACITY)([_a-z\d-\.]+)

然后您可以将替换用作

replacement1+$2+replacement2

我希望它能起作用。如果没有,请说明您的要求

答案 1 :(得分:1)

使用正则表达式按组匹配:

^([\s\S]*?)(SHIP|REC|CAPACITY)([\s\S]*?)$.*

说明:针对结果check this link

  • ^«匹配字符串的开头而不消耗任何字符。如果使用多行模式,则换行符也将立即匹配。
  • 第一,第三捕获组([\ s \ S] *?)
    • \s«匹配任何空格,制表符或换行符。
    • \S«匹配空格,制表符或换行符以外的任何内容。
    • [\s\S]«匹配任意字符
    • *?量词-在零次和无限制次数之间进行匹配,并尽可能减少匹配次数,并根据需要扩展(延迟)
  • 第二捕获组(SHIP | REC | CAPACITY),将这些单词匹配为第二组
  • $在行尾声明位置
    • .*匹配任何字符(行终止符除外)