Python3在lin结尾重新匹配字符或没有字符

2024-06-02 13:00:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一行文本,我需要从中提取一个子字符串,该子字符串后面可能有字符,也可能没有字符。 示例:

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)没有吐出它失败的线路,所以我不知道为什么


Tags: 字符串文本示例someitem字符somethingrobin
3条回答

看来这应该行得通:

mo = re.search(r'\((\d+\.\d+\.\d+)\)'), data1);

它匹配一个左括号、三组由.分隔的数字和一个右括号。数字集将在捕获组1中

如果只想匹配行中最后一组括号,可以使用:

mo = re.search(r'\((\d+\.\d+\.\d+)\)[^()]*$'), data1);

[^()]*$确保在这个集合和行尾之间不再有括号

这个正则表达式应该工作:.*\((\d+\.\d+\.\d+)\)

我添加了一个前缀,它使用下一个组之前的任何字符,因此\((\d+\.\d+\.\d+)\)最后一次出现之前的所有字符都将被忽略。这以不同于$的方式断言行末尾的位置

https://regex101.com/r/vuED26/1

经过进一步的调查,我发现在我寻找的子串之后,子串中永远不会有paren,所以我使用str.rfind()来分离我想要的

相关问题 更多 >