0

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

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

到目前为止,我有这个:

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 之间出现另一个斜线。关于如何修复的想法?

4

1 回答 1

1

也许这

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

 ^             # BOL
 A             # A
 (?! /B/ )     # Not /B/
 / [^/]* /     #   / ... /
 B             # B
 (?! /C/ )     # Not /C/
 / [^/]* /     #   / ... /
 C             # C
 $             # EOL
于 2013-10-19T04:56:32.670 回答