【问题标题】:Ignoring prefix if it exists for regex match, then continue matching如果存在正则表达式匹配,则忽略前缀,然后继续匹配
【发布时间】:2020-09-10 01:29:52
【问题描述】:

我想匹配集合[A-Z]的前1到3个字符,但我想忽略前缀XYZ_

例子:

  • XYZ_ABC1234
  • XYZ_DEF1234
  • DEF0000A0
  • D00A0
  • BCDA1
  • CDE

我正在尝试使用 ^(?!XYZ_)?[A-Z]{1,3} 形式的否定前瞻。但是,这将从前两个示例返回“XYZ”(其他示例工作正常)。 IE。它的输出是:

  • XYZ_ABC1234
  • XYZ_DEF1234
  • DEF0000A0
  • D00A0
  • BCDA1
  • CDE

如何忽略字符串中的前缀(如果存在)并匹配我正在寻找的条件?

【问题讨论】:

  • XYZ_ABCD1234XYZ_ACB1234 怎么样?
  • @CarySwoveland 您将分别提取 ABC 和 ACB。

标签: regex


【解决方案1】:

事实证明,这在某种程度上是特定于 re 模块的 Python。

我能够使用 \K 实现我想要的结果,它会重置报告匹配的起点。

因此,如果使用 Perl 兼容正则表达式 (PCRE),答案是:^(?:XYZ_\K)?[A-Z]{1,3}

More can be read here

【讨论】:

  • 为什么XYZ_ 硬连线在你的正则表达式中?
  • @CarySwoveland 这是一个示例前缀。
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 2016-09-27
  • 2020-05-19
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多