[英]Python re match at specific point in string
如果我在Python中有给定的字符串s
,是否可以轻松地检查正则表达式是否匹配从字符串中特定位置i
开始的字符串?
我宁愿不将整个字符串从i
切到末尾,因为它似乎没有很好的可扩展性(排除了我认为的re.match
)。
re.match
不直接支持此功能。 但是,如果使用re.compile
预编译正则表达式(无论如何通常都是个好主意),则RegexObject
的类似方法, match
(和search
)都采用可选的pos参数:
可选的第二个参数pos在开始搜索的字符串中给出一个索引; 它默认为
0
。 这并不完全等同于切片字符串。'^'
模式字符在字符串的实际开头和换行符之后的位置匹配,但不一定在搜索要开始的索引处匹配。
例:
import re
s = 'this is a test 4242 did you get it'
pat = re.compile('[a-zA-Z]+ ([0-9]+)')
print pat.match(s, 10).group(0)
输出:
'test 4242'
尽管re.match
不支持此功能,但是新的regex
模块(旨在替换re
模块)具有许多新功能,包括用于search
, match
, sub
和subn
pos
和endpos
参数。 尽管尚未正式发布,但是regex
模块可以pip安装,并且适用于2.5到3.4版本的Python。 这是一个例子:
>>> import regex
>>> regex.match(r'\d+', 'abc123def')
>>> regex.match(r'\d+', 'abc123def', pos=3)
<regex.Match object; span=(3, 6), match='123'>
>>> regex.match(r'\d+', 'abc123def', pos=3, endpos=5)
<regex.Match object; span=(3, 5), match='12'>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.