【发布时间】:2013-06-16 17:13:08
【问题描述】:
给定一个字符串,以及该字符串中的一个字符偏移量,我可以使用 Python 正则表达式向后搜索吗?
我要解决的实际问题是在字符串中的特定偏移处获取匹配的短语,但我必须匹配该偏移之前的第一个实例。
在我的正则表达式只有一个符号长(例如:单词边界)的情况下,我正在使用反转字符串的解决方案。
my_string = "Thanks for looking at my question, StackOverflow."
offset = 30
boundary = re.compile(r'\b')
end = boundary.search(my_string, offset)
end_boundary = end.start()
end_boundary
输出:33
end = boundary.search(my_string[::-1], len(my_string) - offset - 1)
start_boundary = len(my_string) - end.start()
start_boundary
输出:25
my_string[start_boundary:end_boundary]
输出:'问题'
但是,如果我有一个可能涉及多个字符的更复杂的正则表达式,则这种“反向”技术将不起作用。例如,如果我想匹配出现在指定偏移量之前的“ing”的第一个实例:
my_new_string = "Looking feeding dancing prancing"
offset = 16 # on the word dancing
m = re.match(r'(.*?ing)', my_new_string) # Except looking backwards
理想输出:喂食
我可能会使用其他方法(将文件分成几行,并向后迭代这些行),但向后使用正则表达式似乎是一个概念上更简单的解决方案。
【问题讨论】:
-
仅供参考,
\b匹配(或更准确地说,消耗)零个字符,而不是一个。
标签: python regex python-2.7