【问题标题】:Extract one word from String [duplicate]从字符串中提取一个单词[重复]
【发布时间】:2019-05-21 01:14:35
【问题描述】:

我正在为 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)

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

【问题讨论】:

  • 您可以使用您的模式删除它们。请说明您的情况。
  • 另外,请告诉我们您使用的是哪种语言或正则表达式工具。解决这个问题的方法不止一种。
  • 你好,这是一个java系统,但我不能自己编码。我只能设置一个正则表达式,然后设置一个“替换”值。我需要更换除 SHIP、REC 或 CAPACITY 之外的所有内容。
  • 如果我提供的“重复”链接不能解决您的问题,请在您的问题中添加更多详细信息。
  • 用什么替换?请在这三行上显示预期的输出。

标签: regex regex-negation


【解决方案1】:

每行可以用正则表达式分成三部分

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

那么就可以用替换为

replacement1+$2+replacement2

【讨论】:

    【解决方案2】:

    使用正则表达式匹配组:

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

    描述:对于结果check this link

    • ^ « 匹配字符串的开头而不消耗任何字符。如果使用多行模式,这也将在换行符之后立即匹配。
    • 第 1、3 个捕获组 ([\s\S]*?)
      • \s « 匹配任何空格、制表符或换行符。
      • \S « 匹配除空格、制表符或换行符以外的任何内容。
      • [\s\S] « 匹配任意字符
      • *? Quantifier — 匹配零次到无限次,尽可能少,根据需要扩展(惰性)
    • 2nd Capturing Group (SHIP|REC|CAPACITY),将这些单词匹配为 2nd group
    • $ 在行尾断言位置
      • .* 匹配任何字符(行终止符除外)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 2021-09-23
      • 2015-05-08
      • 1970-01-01
      • 2017-11-09
      • 2017-02-04
      • 2016-12-27
      相关资源
      最近更新 更多