遇到某个关键字后匹配值的正则表达式

时间:2018-11-21 20:33:30

标签: python regex

我有一些路径用空格分隔,但没有用\ s / \ s分隔,即:空格,斜杠,空格

val1 / val2 val4 / val7关键字/ somevalue aaa / bbb ccc / ddd eee / fff

  • 第一个元素:val1 / val2
  • 第二个元素:val4 / val7
  • 第三个元素:关键字/某值
  • 第四个元素:aaa / bbb
  • 第五个元素:ccc / ddd
  • 第6个元素:eee / fff

当我找到具有某个值的关键字时:

(keyword / [^/\s]*)

以上匹配之后唯一可接受的值可以是aaa / bbb和ccc / ddd,无论顺序如何,无论重复如何。

例如,我应该得到一个匹配项

  1. val1 / val2 val4 / val7关键字/ somevalue aaa / bbb ccc / ddd
  2. val1 / val2 val4 / val7关键字/ somevalue aaa / bbb
  3. val1 / val2 val4 / val7关键字/ somevalue ccc / ddd
  4. val1 / val2 val4 / val7关键字/ somevalue ccc / ddd aaa / bbb
  5. val1 / val2 val4 / val7关键字/ somevalue ccc / ddd aaa / bbb ccc / ddd

任何其他组合都应返回不匹配的内容,例如: 当关键字/ somevalue之后有一些额外的“元素”

  1. val1 / val2 val4 / val7关键字/ somevalue aaa / bbb ccc / ddd eee / fff
  2. val1 / val2 val4 / val7关键字/ somevalue eee / fff ccc / ddd
  3. val1 / val2 val4 / val7关键字/ somevalue aaa / bbb zzz / yyy ccc / ddd

(...)

我应该变得不匹配了。

是否可以使用正则表达式来实现? 我试图用正则表达式解决它,但我坚持了。

1 个答案:

答案 0 :(得分:2)

让我们尝试以下Regex

keyword \/ \w+ ((?:aaa \/ bbb|ccc \/ ddd)(?: |$))+$

位置:

  • keyword是您的固定关键字
  • aaabbbcccddd是从字面上匹配的
  • aaa \/ bbb是允许的第一对,而ccc \/ ddd是第二对
  • (?: |$)检查是一对后跟空白还是行$的结尾。

我必须强调,强烈建议使用编程语言进行提取。您应该分割字符串并检查分区。