我想从一个路径中提取一个特定的字符串。想要的字符串总是以 \0_ASW\
或 \10_BSW\
单词开头。此外,搜索的字符串仅由字母和数字组成。
例如,我想从以下 3 个路径中提取字符串 Mod2000
、ModA
和 ModB
:
C:\MyPath\0_ASW\Mod2000
C:\MyPath\10_BSW\ModA\SubDir
C:\MyPath\10_BSW\ModB
为此,我使用 Positive Lookbehind 编写了一个正则表达式:
\\(?<=(0_ASW|10_BSW)\\)([A-Za-z0-9]+)
使用此正则表达式,第二组可以正确匹配所查找的字符串,并且我能够在 .NET(C#) 中编译正则表达式而不会出现任何错误。但是,一旦我尝试在 Python 中编译它,我就会收到以下正则表达式错误:A lookbehind assertion has to be fixed width
根据我的理解,positive lookbehind 中的两个词,即 0_ASW
和 10_BSW
应该具有固定长度。我不清楚这个错误,因为这两个词的长度分别为 4 和 5 个字符。如果我尝试使这 2 个字符串具有相同的长度,例如3个字符串ASW
和BSW
,正则编译无上述错误。
\\(?<=(ASW|BSW)\\)([A-Za-z0-9]+)
如何修复此正则表达式,使其也能在 Python 中编译?
您可以在这里找到演示:
最佳答案
你也可以使用 non-capturing group :
\\(?:0_ASW|10_BSW)\\(\w+)
https://regex101.com/r/hYCRJf/1
如果正则表达式匹配,您将在 group(1)
中获得所需的字符串。
关于Python 正则表达式 - 后视断言必须固定宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75171050/