【问题标题】:Regular expression that matches values after meetting some keyword满足某个关键字后匹配值的正则表达式
【发布时间】:2019-04-24 11:53:31
【问题描述】:

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

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

  • 第一个元素:val1 / val2
  • 第二个元素:val4 / val7
  • 第三个元素:关键字/某个值
  • 第四个元素:aaa / bbb
  • 第5个元素:ccc / ddd
  • 第六个元素: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

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

  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

(...)

我应该变得不匹配。

可以用正则表达式实现吗? 我试图用正则表达式解决它,但我卡住了。

【问题讨论】:

  • 不,这不是我要找的。编程语言无所谓,但我加了额外的标签
  • 编程语言确实很重要,因为并非所有语言都使用相同的正则表达式风格。因此,适用于一种语言的模式可能不适用于另一种语言。
  • 这对我来说没关系,反正谢谢你的努力。

标签: python regex


【解决方案1】:

让我们试试下面的Regex

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

地点:

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

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

【讨论】:

  • 感谢正则表达式,它正在工作。在这种情况下,不可能使用任何编程语言。
  • 这很神秘。在什么情况下会出现以下情况? a) 使用正则表达式解决问题,b) 不使用编程语言解决问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多