【发布时间】:2021-05-31 19:52:34
【问题描述】:
我在 Python 中使用 RegEx 在文本文件中搜索名册中出现的名称,然后附加一个“!”字符到字符串的开头。例如:
名册 = ["name1," "name2," "name3"]
原始字符串 = "name1 回家了。"
输出字符串 - “!name1 回家了。”
我找到了this thread 关于如何附加到字符串末尾的信息,我成功地用于此目的。我已经修改了 RegEx 以在字符串的开头附加,但没有成功。我的尝试如下 - 有什么建议吗?
with open("File.txt", 'r+') as f:
s = f.read()
new_s = re.sub(r'^(.*{}.*)^'.format(re.escape("name1")), lambda g: g.group(0) + "!", s, flags=re.MULTILINE)
f.seek(0)
f.write(new_s)
【问题讨论】:
-
您的意思是
$表示行尾吗?或\Z表示字符串结尾? -
您所展示的尝试到底有什么问题?您是否尝试过使用
'!' + ...而不是... + '!'? -
请注意,您可以逐行阅读,这将使代码更简单。此外,这里不需要 lambda,
\g<0>是对整个比赛的反向引用。或者,您可以使用\1,因为您使用捕获组包装了整个模式。主要的是^和re.M在 LF 字符之后匹配,而.默认情况下不匹配 LF 字符。但是在这里使用re.S/re.DOTALL并不是一个好主意。 -
这个词是“前置”。 “追加”特定于末尾,“前置”用于将某些内容放在开头。
-
仍然,
name和输入中的数字之间真的有空格吗,搜索短语中没有空格?搜索词组末尾是否真的包含逗号?如果这些是拼写错误,请尝试ideone.com/AyYaJh