我正在尝试匹配以下文字中的项目编号:
User Number 1 will probably like movie ID: RecommendedItem[item:557, value:7.32173]the most!
以下是我的尝试:
myfile = open('result.txt', 'r')
for line in myfile:
m = re.search('(?<=RecommendedItem\[item:).+,', line)
print m
然而,这给了我一个错误:
<_sre.SRE_Match object at 0x106e79168>
我想知道断言背后可能出现什么问题...(Lookbehind断言似乎不适用于regexpal.com,即使是简单的事情(?&lt; = a)b也会以红色突出显示)
答案 0 :(得分:4)
这不是错误! re.search
的结果是MatchObject。其中包含匹配的内容,可通过MatchObject.group(groupNumber,...)
访问(其他方式,例如groups()等),如下所述:group。你需要一个正则表达式来做你所要求的:
import re
t = "User Number 1 will probably like movie ID: RecommendedItem[item:557, value:7.32173]the most!"
itemNumber = re.search(r'(?<=RecommendedItem\[item:)(\d+)',t)
print(itemNumber.group(0))
或者,使用命名组:
import re
t = "User Number 1 will probably like movie ID: RecommendedItem[item:557, value:7.32173]the most!"
itemNumber = re.search(r'(?<=RecommendedItem\[item:)(?P<itemNumber>\d+)',t)
print(itemNumber.groupdict()["itemNumber"]) #note using groupdict() not group()
产
>>>
557
答案 1 :(得分:1)
要获得正则表达式的匹配部分,您应该使用
if m:
print line[m.start():m.end()]
或者您可以使用返回匹配列表的re.findall
函数:
m = re.findall('(?<=RecommendedItem\[item:).+,', line))
if m:
print m[0]
您可能还想稍微修改您的正则表达式,不要在末尾使用逗号:'(?<=RecommendedItem\[item:)\d+
答案 2 :(得分:1)