Python连续多次匹配正则表达式(不是findall方式)

标签 python regex match

这个问题不是询问在字符串等中多次查找“a”。

我想做的是匹配:

[ a-zA-Z0-9]{1,3}\.

多次正则表达式,一种方法是使用 |

'[ a-zA-Z0-9]{1,3}\.[ a-zA-Z0-9]{1,3}\.[ a-zA-Z0-9]{1,3}\.[ a-zA-Z0-9]{1,3}\.|[ a-zA-Z0-9]{1,3}\.[ a-zA-Z0-9]{1,3}\.[ a-zA-Z0-9]{1,3}\.|[ a-zA-Z0-9]{1,3}\.[ a-zA-Z0-9]{1,3}\.'

所以这与正则表达式匹配 4 或 3 或 2 次。 匹配如下内容:

a. v. b.
m a.b.

有什么方法可以让这个更像编码吗?

我尝试过这样做

([ a-zA-Z0-9]{1,3}\.){2,4} 

但功能与我期望的不一样。这一项匹配:

regex.findall(string)
[u' b.', u'b.']

字符串是:

a. v. b. split them a.b. split somethinf words. THen we say some more words, like ten

有什么办法可以做到这一点吗?目标是匹配可能的英语缩写和名称,例如 Mary J. E.,句子标记器将其识别为句子标点符号,但实际上并非如此。

我想匹配所有这些:

U.S. , c.v.a.b. , a. v. p. 

最佳答案

首先,您的正则表达式将按您的预期工作:

>>> s="aa2.jhf.jev.d23.llo."
>>> import re
>>> re.search(r'([ a-zA-Z0-9]{1,3}\.){2,4}',s).group(0)
'aa2.jhf.jev.d23.'

但是如果你想匹配一些子字符串,例如 U.S. ,c.v.a.b。 , A。 v.p. 您需要将整个正则表达式放入捕获组中:

>>> s= 'a. v. b. split them a.b. split somethinf words. THen we say' some more 
>>> re.findall(r'(([ a-zA-Z0-9]{1,3}\.){2,4})',s)
[('a. v. b.', ' b.'), ('m a.b.', 'b.')]

然后使用列表理解来获取第一个匹配项:

>>> [i[0] for i in re.findall(r'(([ a-zA-Z0-9]{1,3}\.){2,4})',s)]
['a. v. b.', 'm a.b.']

关于Python连续多次匹配正则表达式(不是findall方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853835/

相关文章:

javascript - 如何在javascript中计算字符串中的非空行

match - 跨两个工作簿中的多个列的 VLOOKUP

python - GTK3+ (3.14) 滚动窗口上的绘图区域

python - PyTorch [1 if x > 0.5 else 0 for x in output ] 带张量

javascript - 使用正则表达式匹配字符串中的 pos 或 neg 两个数字

regex - 通过正则表达式限制文本中的行数

arrays - Match 函数如何将搜索键数组视为输入?

python - Heroku 使用 postgres 连接和 python 安排任务

python - 局部变量在赋值之前被引用;不知道为什么

PHP - 在字符串中搜索电话号码和电子邮件