如何使用正则表达式提取文本每行的最后一个单词?
解决正则提取每行最后一个含特殊字符的单词问题
嘿,我注意到你现在用的正则表达式re.findall(r'\s(\w+)$', content, re.MULTILINE)没法正确提取目标单词——因为你的目标单词里包含/、+这类特殊字符,而\w只能匹配字母、数字和下划线,完全覆盖不到这些符号,所以才会提取失败。
给你两个靠谱的解决方案:
方案1:精准匹配目标字符集
如果你的目标单词只会包含字母、数字、_、/、+、=这些符号,可以直接把这些字符放进字符集里:
lastwords = re.findall(r'\s([\w/+=-]+)$', content, re.MULTILINE)
这个正则里的[\w/+=-]明确指定了允许的字符类型,能精准匹配你给出的示例单词。
方案2:通用匹配(更推荐)
如果不确定目标单词还会出现什么特殊字符,直接用反向字符集匹配所有非空白字符会更稳妥:
lastwords = re.findall(r'\s([^\s]+)$', content, re.MULTILINE)
这里的[^\s]表示匹配除了空白(空格、换行、制表符等)之外的任意字符,+表示匹配1次或多次,不管单词里有什么特殊符号,只要它是每行末尾的非空白内容,都能被准确抓出来。
测试示例
假设你的content内容是:
sfdsa AAAAB3NzaCLkc3M
gadsgadsg AAAB3NzaCl/Ezfl
dogjasdpgpds AAAB3Nza/ClBAm+4lj
用方案2的正则提取后,lastwords会得到:['AAAAB3NzaCLkc3M', 'AAAB3NzaCl/Ezfl', 'AAAB3Nza/ClBAm+4lj'],完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jenveloper




