[英]What does it mean when an error shows multiple files in a Python traceback?
[英]What does error: nothing to repeat mean in this traceback from a compiled Python regex
我有一个有趣的问题,试图理解和改进我在Python中使用REGEX
这是一个正则表达式
verbose_signature_pattern_2 = re.compile("""
^ # begin match at new line
\t* # 0-or-more tab
[ ]* # 0-or-more blankspaces
S # capital S
[iI][gG][nN][aA][Tt][uU][rR][eE]
[sS]? # 0-or-1 S
\s* # 0-or-more whitespace
[^0-9] # anything but [0-9]
$ # newline character
""", re.VERBOSE|re.MULTILINE)
当我运行代码时,我收到一个错误
""", re.VERBOSE|re.MULTILINE)
File "C:\Python27\lib\re.py", line 190, in compile
return _compile(pattern, flags)
File "C:\Python27\lib\re.py", line 242, in _compile
raise error, v # invalid expression
error: nothing to repeat
如果我删除选项卡(\\ t)特殊字符上的0或更多限定符,则不会抛出错误
我正在尝试找到一些行,这些行有一些Signature一词的变体作为行中的第一个单词。 我知道我可以使用稍微不同的方法来获得我需要的东西。 但是,我想象文档的创建者可能会选中以大致居中这个词,或者他们可能会使用空格。 我不想使用\\ s因为我不想捕获可能在具有单词Signature的行之前的所有空行。 具体来说,我试图避免捕获所有这些问题
'\n\n\n\n Signature \n
我只想在输出中看到这个
' Signature \n
我确实意识到我可以轻松剥离多余的新行字符,但我正在努力理解并更精确地做事。 有趣的是,以下REGEX具有相同的开始,但它似乎按预期工作。 这就是我没有得到一个错误,当这个编译,它似乎给了我想要的东西 - 虽然我仍然需要找到更多的边缘情况。
verbose_item_pattern_2 = re.compile(r"""
^ # begin match at newline
\t* # 0-or-more tabs
[ ]* # 0-or-more blanks
I # a capital I
[tT][eE][mM] # one character from each of the three sets this allows for unknown case
\t* # 0-or-more tabs
[ ]* # 0-or-more blanks
\d{1,2} # 1-or-2 digits
[.]? # 0-or-1 literal .
\(? # 0-or-1 literal open paren
[a-e]? # 0-or-1 letter in the range a-e
\)? # 0-or-1 closing paren
.* # any number of unknown characters so we can have words and punctuation
[^0-9] # anything but [0-9]
$ # 1 newline character
""", re.VERBOSE|re.MULTILINE)
第一个字符串不是原始字符串。 因此,当Python编译字符串时(在它进入正则表达式引擎之前),它将替换所有转义序列。 所以\\t
实际上会成为字符串中的制表符(而不是反斜杠-t)。 但是你正在使用freespacing模式( re.VERBOSE
)。 因此,空白是微不足道的。 你的正则表达式相当于:
^*[ ]*S[iI][gG][nN][aA][Tt][uU][rR][eE][sS]?\s*[^0-9]$
即使在非原始字符串中, \\s
仍保持\\s
,因为它不是Python字符串中可识别的转义序列。
然后在开头^*
导致问题,因为你不能重复锚。
这就是为什么你应该总是使用原始字符串来编写正则表达式。 然后\\t
只保留反斜杠-t,正则表达式引擎可以将其解释为选项卡。
顺便说一句, [ ]
的空格不是问题,因为即使在详细/自由空间模式中,字符类中的空格也很重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.