如何使用字符串列表进行正则表达式搜索?
问题分析与解决方案
嘿,你这是把正则匹配的方向搞反啦!咱们来一步步理清楚:
你的问题出在哪?
你写的代码是把amz_string整个编译成正则表达式,然后用这个正则去匹配列表locs里的每个设施代码——这显然不对啊!比如用'LGB6 is in Riverside, CA'去匹配LGB6,肯定匹配不上,结果自然是空列表[]。
另外还有两个小细节要注意:
- 你的
locs列表里的元素没加引号,会被当成未定义的变量,运行时会报错,得改成locs = ['LGB6', 'OAK5'] filter(r.search. locs)里的点是语法错误,应该是逗号:filter(r.search, locs)
正确的实现方式
根据你的需求(用设施列表做正则搜索),我们要反过来:用列表里的设施代码作为匹配规则,去检查它们是否出现在目标字符串amz_string里,或者从字符串中提取出这些代码。这里有两种常用方法:
方法1:遍历列表逐个匹配
适合简单场景,直观易懂:
import re locs = ['LGB6', 'OAK5'] amz_string = 'LGB6 is in Riverside, CA' # 筛选出列表中出现在目标字符串里的设施 matches = [loc for loc in locs if re.search(loc, amz_string)] print(matches) # 输出: ['LGB6']
方法2:合并成正则模式一次性匹配
如果列表很长,这种方式效率更高,因为只需要编译一次正则:
import re locs = ['LGB6', 'OAK5'] amz_string = 'LGB6 is in Riverside, CA' # 把列表元素用|拼接成正则模式,匹配任意一个设施 pattern = re.compile('|'.join(locs)) # 从字符串中找出所有匹配的设施 matches = pattern.findall(amz_string) print(matches) # 输出: ['LGB6']
额外说明
如果你的设施代码里包含正则特殊字符(比如.、*这类),记得用re.escape()来转义,避免正则解析出错:
pattern = re.compile('|'.join(re.escape(loc) for loc in locs))
内容的提问来源于stack exchange,提问作者dearprudence
相关产品推荐
相关产品推荐

