我有一行文本需要从中提取一个子字符串,该子字符串后面可能有也可能没有字符。 例子:
Robin Hood viewed item "something.mov" (99.12345.567891011)
或...
Robin Hood viewed item "something.mov" (88.123.456789101) some other stuff.
我需要拉出括号内的子字符串。子字符串将始终是由两个句点分隔的三组数字。引号后面带有.mov
的字符串也可以包含任意字符,因此搜索应始终从该行的末尾开始。
如果在结束括号后面有字符,那么该行的末尾将有一个.
。如果在结束括号后面没有字符,那么该行的末尾将没有.
。
现在我有:
mo = re.search(r'(\d[\d.]*)\).*$', data1)
但是,这在某些比赛中中断。问题是我正在使用的工具(Matillion)不会吐出失败的信息,所以我不知道为什么。
答案 0 :(得分:0)
在进一步调查中,我发现在我要查找的子字符串之后,子字符串中永远不会有parens,因此我只是使用str.rfind()隔离了我想要的东西。
答案 1 :(得分:0)
这似乎应该可行:
mo = re.search(r'\((\d+\.\d+\.\d+)\)'), data1);
这将匹配一个开头括号,由.
分隔的3组数字和一个结尾括号。这些数字集将在捕获组1中。
如果只想匹配该行的最后一组括号,则可以使用:
mo = re.search(r'\((\d+\.\d+\.\d+)\)[^()]*$'), data1);
[^()]*$
确保该集合与行尾之间不再有括号。
答案 2 :(得分:0)
此正则表达式应该有效:.*\((\d+\.\d+\.\d+)\)
。
我添加了一个前缀,该前缀消耗下一组之前的所有字符,因此最后一次出现\((\d+\.\d+\.\d+)\)
之前的所有字符都将被忽略。这以不同于$
的方式断言行尾的位置。