我想从路径中提取一个特定的字符串。所需的字符串总是以\0_ASW\
或\10_BSW\
单词开头。另外,所需的字符串只包含字母和数字。
例如,从下面3个路径中,我想提取字符串Mod2000
,ModA
和ModB
:
C:\MyPath\0_ASW\Mod2000
C:\MyPath\10_BSW\ModA\SubDir
C:\MyPath\10_BSW\ModB
为此,我使用正向后看编写了一个正则表达式:
\\(?<=(0_ASW|10_BSW)\\)([A-Za-z0-9]+)
有了这个正则表达式,第二组匹配的字符串正确,我能够编译正则表达式在**.NET(C#)**没有任何错误。然而,一旦我试图编译它在Python我得到以下正则表达式错误:A lookbehind assertion has to be fixed width
根据我的理解,正向lookbehind中的两个字,即0_ASW
和10_BSW
应该具有固定长度,错误对我来说不明显,因为这两个字分别具有4个和5个字符的固定长度,如果我试图使这两个字符串具有相等的长度,例如3个字符串ASW
和BSW
。正则表达式编译时不会出现上述错误。
\\(?<=(ASW|BSW)\\)([A-Za-z0-9]+)
我如何修正这个正则表达式,使它也能用Python编译?
您可以在此处找到演示:
https://regex101.com/r/qfwfJJ/1
https://regex101.com/r/zAVk5Z/1
3条答案
按热度按时间4si2a6ki1#
您也可以使用non-capturing group:
https://regex101.com/r/hYCRJf/1
如果正则表达式匹配,您将在
group(1)
中得到所需的字符串。hmae6n7t2#
你可以使用像这样的一个交替的前瞻,因为对于Python,它必须是固定的宽度,这在你的模式中没有。
参见regex101 demo。
如果你可以使用PyPi regex module,你匹配你想要的,然后你可以使用
\K
忘记什么是匹配到目前为止:参见另一个regex101 demo。
2wnc66cl3#
https://regex101.com/r/e7vH34/1