Python 正则表达式 - 后视断言必须固定宽度

标签 python regex

我想从一个路径中提取一个特定的字符串。想要的字符串总是以 \0_ASW\\10_BSW\ 单词开头。此外,搜索的字符串仅由字母和数字组成。

例如,我想从以下 3 个路径中提取字符串 Mod2000ModAModB:

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_ASW10_BSW 应该具有固定长度。我不清楚这个错误,因为这两个词的长度分别为 4 和 5 个字符。如果我尝试使这 2 个字符串具有相同的长度,例如3个字符串ASWBSW,正则编译无上述错误。

\\(?<=(ASW|BSW)\\)([A-Za-z0-9]+)

如何修复此正则表达式,使其也能在 Python 中编译?

您可以在这里找到演示:

https://regex101.com/r/qfwfJJ/1

https://regex101.com/r/zAVk5Z/1

最佳答案

你也可以使用 non-capturing group :

\\(?:0_ASW|10_BSW)\\(\w+)

https://regex101.com/r/hYCRJf/1

如果正则表达式匹配,您将在 group(1) 中获得所需的字符串。

关于Python 正则表达式 - 后视断言必须固定宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75171050/

相关文章:

正则表达式和文件名通过删除除最后一个匹配项之外的点并忽略第一个字符来更改

python - 修补定义函数的文件中的函数

python - 使用 python pandas 找到最高的增长?

python正则表达式基础

javascript - 匹配 [word] 但不匹配 [word] 撇号正则表达式

java - 无论内部是否有连字符,都删除短于 n 的单词

python - Eclipse 调试上的变量查看器截断字符串值

python - 是否有可能在 python3 中完全内置 `str` Monkey Patch

python - 避免使用多个 if 语句

javascript - 获取字符串中最后一个换行符的最有效方法是什么