【问题标题】:Python regex - find distinct pattern with metacharactersPython regex - 使用元字符找到不同的模式
【发布时间】:2013-10-28 00:40:17
【问题描述】:

我需要将 A\/*\/B\/*\/C 之类的伪正则表达式模式转换为正则表达式,以在路径上创建匹配/不匹配决策。 * 用作元字符,它匹配正斜杠之间的任何字符串或数字集。上面的正则表达式是“字段敏感的”,即它应该只匹配在正斜杠之间具有特定或元字符的确切序列的字符串。因此,A\/*\/B\/*\/C(A 第一,然后是任何 2,B 3,然后是任何 4,C 5)应该匹配 'A/foo/B/bar/C',因为 A 出现在第一,任何东西,第二,B 3 等等,但不是 A/foo/bar/B/baz/C,因为 A 出现第 1 名,B 出现在我们想要的第 4 名而不是第 3 名。

我已经在正则表达式之外解决了这个问题,但想看看是否有一个仅限正则表达式的解决方案。

到目前为止,我有这个:

import re
matcher=re.compile('[A\/(.*?)\/B\/(.*?)\/C]')
matched=matcher.match('A/foo/bar/B/baz/C')
print matched 
<_sre.SRE_Match object at 0x005CBBB8>
print matched.group()
A

如您所见,问题在于它与 A/foo/bar/B/baz/C 匹配,因为它不在乎 A 和 B 之间出现另一个斜线。关于如何修复的想法?

【问题讨论】:

  • 你肯定不想在这里使用字符类。 [...] 是一个字符类。它用于[a-z] 匹配任何小写字母。一个字符类只匹配一个字符。打印出 matched 匹配的内容!
  • 已修复。那是一个错字。并展示了matched打印出来的内容。

标签: python regex


【解决方案1】:

也许这个

 //   ^A(?!/B/)/[^/]*/B(?!/C/)/[^/]*/C$

 ^             # BOL
 A             # A
 (?! /B/ )     # Not /B/
 / [^/]* /     #   / ... /
 B             # B
 (?! /C/ )     # Not /C/
 / [^/]* /     #   / ... /
 C             # C
 $             # EOL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多