Python 连续多次匹配正则表达式(不是 findall 方式)
Python matching regex multiple times in a row (not the findall way)
这个问题不是问在一个字符串中多次查找 'a' 等等
我想做的是匹配:
[ a-zA-Z0-9]{1,3}\.
regexp 多次,一种方法是使用 |
'[ 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.']
这个问题不是问在一个字符串中多次查找 'a' 等等
我想做的是匹配:
[ a-zA-Z0-9]{1,3}\.
regexp 多次,一种方法是使用 |
'[ 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.']