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

Regular expression that matches values after meetting some keyword

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

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

  • 第一个元素:val1/val2
  • 第2个元素:VAL4/VAL7
  • 第三个元素:关键字/somevalue
  • 第四要素:AAA/BBB
  • 第五要素:CCC/DDD
  • 第6要素:EEE/FFF

当我找到包含someValue的关键字时:

1
(keyword / [^/\s]*)

上述匹配后的唯一可接受值可以是AAA/BBB和CCC/DDD,无论顺序如何,无论重复。

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

  • val1/val2 val4/val7关键字/somevalue aaa/bbb ccc/ddd
  • val1/val2 val4/val7关键字/somevalue aaa/bbb
  • val1/val2 val4/val7关键字/somevalue ccc/ddd
  • val1/val2 val4/val7关键字/somevalue ccc/ddd aaa/bbb
  • val1/val2 val4/val7关键字/somevalue ccc/ddd aaa/bbb ccc/ddd
  • 任何其他组合都应返回unmatch,例如:当关键字/somevalue后面有一些额外的"element"时

  • val1/val2 val4/val7关键字/somevalue aaa/bbb ccc/ddd eee/fff
  • val1/val2 val4/val7关键字/somevalue eee/fff ccc/ddd
  • val1/val2 val4/val7关键字/somevalue aaa/bbb zzz/yyy ccc/ddd
  • (…)

    我应该被打败。

    可以用正则表达式来实现吗?我想用正则表达式来解决这个问题,但我坚持了。


    让我们试试下面的regex:

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

    哪里:

    • keyword是你的固定关键字
    • aaabbbcccddd是字面上要匹配的。
    • aaa \/ bbb是允许的第一对,ccc \/ ddd是第二对。
    • (?: |$)检查一对夫妇后面是否有空格或一行$的末尾。

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