0

我想检查一个干草堆是否以包含一些更改文本的针结尾。

这是我尝试过的并显示“sre_constants.error: nothing to repeat”错误:

import re

string = 'stuff ... </div> <img src="..." title"SOME_TEXT_THAT_CHANGES">'

pattern = r'/<\/div> <img src="..." title"(*.)">$/'

prog = re.compile(pattern)
result = prog.match(string)

print result
4

2 回答 2

3

应该是这样的:

>>> import re
>>> string = 'stuff ... </div> <img src="..." title"SOME_TEXT_THAT_CHANGES">'
>>> pattern = r'</div> <img src="..." title"(.*)">$'
>>> prog = re.compile(pattern)
>>> result = prog.search(string)
>>> result
<_sre.SRE_Match object at 0x0188A3A0>
>>> print result.group(1)
SOME_TEXT_THAT_CHANGES
>>>

现在让我回顾一下我所做的更改:

  1. 需要*.更改为的模式.*(这是导致错误的原因)。
  2. 您需要使用re.searchhere,它在字符串中搜索模式,而不是re.match,它寻找完全匹配。
  3. /Python 正则表达式的开头和结尾不需要's。
  4. /不需要在</div>
于 2013-11-07T19:05:46.547 回答
2

将您的正则表达式更改为:

r'<\/div> <img src="[.]{3}" title"(.*)">$'
  1. . 在正则表达式中具有特殊含义,因此您应该使用字符类或使用\.

  2. 无需/ /在 Python 中包含正则表达式。

  3. *.应该是.*

  4. re.match仅在字符串的开头匹配,因此最好使用re.search.( re.search()vsre.match() )

演示:

>>> pattern = r'<\/div> <img src="[.]{3}" title"(.*)">$'
>>> prog = re.compile(pattern)
>>> prog.search(string)
<_sre.SRE_Match object at 0xb5dcf920>
于 2013-11-07T19:04:49.717 回答