【问题标题】:Need a little regex help in python在 python 中需要一点正则表达式帮助
【发布时间】:2016-11-03 10:13:58
【问题描述】:

我有一长串来自石墨实例的命名空间,我正在尝试运行一些验证并过滤掉未使用正确格式输入的命名空间。

我通常可以使用正则表达式,但这个伤害了我,希望有人能提供帮助。

有一些基本的验证需要完成,我已经走到了这一步:

^(stats\.gauges\..*\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.)

目标是过滤和匹配遵循标准化stats.gaugues.*.(exact OR match).(exact OR match).的那些

这适用于以下情况:

stats.gauges.gitswarm.dur.p.durgitswarm1.service.repos.eeps-merge_demo.users

但不幸的是,有人输入了类似的内容:

stats.gauges.gitswarm.dur.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users

所以这些匹配一直到第二个dur.p. 跳过精确匹配上可能出现的错误,例如stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users;这是我不想要的。

我觉得这很简单,但到目前为止似乎无法掌握。

非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 那么为什么stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users 不遵循标准化的stats.gaugues.*.(exact OR match).(exact OR match).?在这种情况下,* 匹配 gitswarm.durham.p.durgitswarm1。问题在于您对* 的定义。
  • 它需要失败,因为 1) dur 是有效值,而不是 durham 和 2) dur.p。不应该在它所在的位置,即使是无效值。我同意 * 的定义,我认为这是我在放入正则表达式时遇到的问题。

标签: python regex


【解决方案1】:

这应该可行。基本上你需要让你的.* 不贪心 ^(stats\.gauges\..*?\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.)

【讨论】:

  • 我不认为贪婪或无关紧要:OP 正试图发现负面情况
  • 我也试过了 :( ^(stats\.gauges\..*?\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(? :p|s|q|u|d|x)\.) !Regular expression visualizationDebuggex Demo
  • 在这种情况下,您能否详细说明您的模式,因为.* 表示匹配任何内容,所以您必须想出比.* 更具体的东西,您能告诉我@987654327 之间到底会发生什么吗? @ 和 dur.p。总是一个字吗?
  • 是的,确切地说,应该只有一个词。只是 stats.gauges.{word}.dur|hop|etc.p|d|u。抱歉,我没有在早期说得更清楚。
  • 我认为您只是帮助灯泡熄灭了...我认为应该只是:^(stats\.gauges\.\w*\.(?:dur|hop|scz| led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.)
猜你喜欢
  • 1970-01-01
  • 2021-08-29
  • 2016-02-01
  • 1970-01-01
  • 2021-09-01
  • 2012-11-30
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多