[英]Python Regular Expression findall with variable
我正在尝试将 re.findall 与后视和期待一起使用来提取数据。 当我不使用 raw_input 变量时,正则表达式工作正常,但我需要用户能够输入各种不同的搜索词。
这是当前的代码:
me = re.findall(r"(?<='(.+)'+variable+'(.+)')(.*?)(?='(.+)+variable+(.+)')", raw)
如您所见,我试图在一个搜索词之间提取字符串。
但是,每次使用这种类型的格式时,都会出现固定宽度错误。 有没有办法解决?
我也尝试了以下格式但没有成功。
variable = raw_input('Term? ')
'.*' + variable + '.*'
和
'.*%s.*' % (variable, )
和
'.*{0}.*'.format(variable)
和
'.*{variable}.*'.format(variable=variable)
Lookbehind 通常的实现方式(包括它的 Python 实现)有一个你不幸遇到的固有限制:lookbehinds 不能是可变长度的。 此处的“关于 Lookbehind 的重要说明”部分解释了原因。 不过,我认为您应该能够在没有后视的情况下执行正则表达式。
我不确定这是否是你的意思,但它可能会让你开始。 据我了解您的问题,您不需要前瞻或后视。 这适用于 Python 2.x(不适用于 Python 3):
>>> import re
>>> string_to_search = 'fish, hook, swallowed, reeled, boat, fish'
>>> entered_by_user = 'fish'
>>> search_regex = r"{0}(.+){0}".format(entered_by_user)
>>> match = re.search(search_regex, string_to_search)
>>> if match:
... print "result:", match.group(1).strip(' ,')
...
result: hook, swallowed, reeled, boat
如果您真的想要上面评论中的最后一个“鱼”,那么只需从format()
字符串中删除第二个{0}
。
此解决方案应该有效:
me = re.findall(rf"(?<='(.+)'+{variable}+'(.+)')(.*?)(?='(.+)+{variable}+(.+)')", raw)
您还可以根据需要添加许多不同的变量。 为正则表达式和 {} 之间的所需变量添加rf
import re
text = "regex is the best"
var1 = "is the"
var2 = "best"
yes = re.findall(rf"regex {var1} {var2}", text)
print(yes)
['正则表达式是最好的']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.