正则表达式:捕获字符串并忽略特定模式

时间:2019-04-03 11:39:52

标签: regex

这是我要排除某些模式(| 2正常)的那一行:

    #TR|1 Normal    Rationale|2 Normal  Yesterday I ate an apple.|2 Normal  Today, I have some work.|2 Normal   Tomorrow, I'm gonna eat Libanese food.

我尝试了以下表达式:

    \|\d+ [^\t]+\tRationale([^\|2 Normal]+)

据我所知,序列([^ \ | 2 Normal] +)应该写入与“ ^ \ | 2 Normal”不匹配的任何字符,但实际上不返回任何内容。 / p>

预期结果:

我想将此作为输出:

“昨天我吃了一个苹果。今天,我有工作。明天,我要吃黎巴嫩食物。”

或者,即使有可能,也可以在每个句子之间添加换行符:

“昨天我吃了一个苹果。”

“今天,我有一些工作。”

“明天,我要吃黎巴嫩食物。”

实际结果:

如果我输入此正则表达式:

   \|\d+ [^\t]+\tRationale([^\|2 Normal]+)

上面的此正则表达式不返回任何内容 而这个:

    \|\d+ [^\t]+\tRationale(.*)

返回:

    |2 Normal   Yesterday I ate an apple.|2 Normal  Today, I have some work.|2 Normal   Tomorrow, I'm gonna eat Libanese food.

有解决方案吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可能要做的是使用替换来匹配可选的Rationale或#TR,并在替换中使用换行符:

(?:\s*(?:Rationale|#TR)?\|\d+ Normal\s+)+

说明

  • (?:非捕获组
    • \s*(?:Rationale|#TR)?-匹配0+个空格字符和基本原理或#TR
    • \|\d+ Normal\s+-匹配一个|,1+个数字(或完全替换为2),一个空格和Normal,再加上1+倍的空白字符
  • )+-关闭非捕获组并重复1次以上

Regex demo