如何使用正则表达式提取方括号内首个单词并移除方括号?
解决方法:提取方括号内的目标单词
你的问题在于原来的正则表达式是把整个方括号包裹的内容都替换为空,自然就把想要的abstraction也删掉了。我们需要调整思路,从方括号内的内容里提取出目标单词,而不是直接删除整个括号块。
这里给你两种可行的方案:
方案一:用正则分组直接替换
通过正则捕获方括号内的第一个单词,然后把整个括号内容替换成这个捕获到的单词。代码如下:
import re with open('test.txt','r') as f: for line in f: # 匹配方括号内的内容,精准捕获第一个单词 line = re.sub(r'\[\s*(\w+)[^\]]*\]', r'\1', line) s = line.strip() print(s)
正则说明:
\[:匹配左方括号\s*:匹配括号后可能存在的空格(对应你内容里[和abstraction之间的空格)(\w+):捕获一个或多个字母/数字/下划线,这里正好匹配abstraction[^\]]*:匹配从第一个单词到右括号之间的所有内容(不管是什么,只要不是右括号)\]:匹配右方括号- 替换为
\1就是把整个匹配的括号块替换成我们捕获到的第一个单词
方案二:先提取括号内容再分割
如果你的内容格式可能有变化,这种方法更灵活:先把方括号内的所有内容提取出来,再通过分割字符串拿到目标单词。
import re with open('test.txt','r') as f: for line in f: # 提取所有方括号内的内容 bracket_contents = re.findall(r'\[(.*?)\]', line) for content in bracket_contents: # 按逗号分割,取第一个元素并去除前后空格 target_word = content.split(',')[0].strip() print(target_word)
这个方法的逻辑很直观:先把每个方括号里的文本(比如abstraction, verb.cognition:abstract,+ )提取出来,再用逗号分割成列表,取第一个元素就是我们要的abstraction,最后用strip()去掉可能的空格。
两种方案都能帮你得到预期的输出abstraction,你可以根据自己的实际需求选择~
内容的提问来源于stack exchange,提问作者jan
相关产品推荐
相关产品推荐

