1

我正在尝试匹配以下文本中的项目编号:

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上不起作用,即使像 (?<=a)b 这样简单的东西在那里以红色突出显示)

4

3 回答 3

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
于 2013-05-01T08:15:03.897 回答
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+

于 2013-05-01T08:15:56.203 回答
1

要从匹配对象中获取项目编号,请尝试打印 m.groups()。

请参阅http://docs.python.org/2/library/re.html#match-objects了解您可以使用“m”执行的其他操作

于 2013-05-01T08:18:30.850 回答