所以我有一个字符串列表,让我们说:my_list = ['hope', 'faith', 'help']
现在我打开一个名为infile
的文本文件,然后用单词分隔
for line in infile:
line_list = line.split()
现在我想制作一个正则表达式,我可以通过使用for循环来改变:
for word in line_list:
match = re.findall(word$, line_list)
print(match)
我已经尝试了几种方法来获得“#”字样'进入那个正则表达式,但似乎没有工作 有什么想法吗?
答案 0 :(得分:1)
您不需要使用正则表达式。 Python中的标准类型endswith
有str
方法。
with open('path/name.ext') as infile :
line_list = infile.readlines()
for line in line_list :
match = [word for word in my_list if line.endswith(word)]
print(match)
这将打印出匹配的单词或文件中每一行的空列表。
但如果你绝对想要......你可以使用正则表达式来实现...
pattern = r'({0})$'.format('|'.join(my_list))
for line in line_list :
match = re.findall(pattern, line)
print(match)
搜索模式包含一个组,其中my_list
的所有元素都使用逻辑or
|
进行操作。
答案 1 :(得分:1)
正则表达式只是一个字符串,可能包含也可能不包含通配符或特殊字符。因此,“将列表元素作为正则表达式的一部分”的最佳方法是“编写”正则表达式:
my_list = ['hope', 'faith', 'help']
for regex_el in my_list:
regex = "{0:s}".format(regex_el)
print regex
当然,这过于简单化。那只是使用普通字符串作为正则表达式。您可以使用小的正则表达式来插入较大的正则表达式,或者您可以使用正则表达式的其他部分将列表中的元素包围:
regex = "^ *{0:s} ".format(regex_el)
构造一个正则表达式,只有当它是一个字符串中的第一个单词,前面没有空格或后面跟一个空格时才能找到你的单词。
然后在你的代码中,将你的调用中的'word'替换为上面构造的'regex'。
您需要将调用中的line_list
替换为findall以及findall预期模式(简单字符串或真正的正则表达式)和要搜索的字符串(可能是{{ 1}}在你的循环中或word
从循环遍历文件中的行。
另请注意,如果未找到匹配项,line
将打印一个空列表。您可能希望用
print match
仅打印与您构造的正则表达式匹配的行中的单词。
我可以建议您查看这个网站:https://regex101.com/来试验正则表达式以及您正在使用的字符串。