如何用Python正则表达式提取字符串中括号内的单个单词
提取字符串中被括号包裹的单个单词
嘿,我明白你要做的事了——从那种嵌套括号的字符串里揪出像CNN这样被单独一对括号包起来的单个单词对吧?别担心,正则表达式其实没那么复杂,我给你一步步讲清楚。
核心正则表达式
首先,我们需要的正则是这样的:
\(([A-Za-z0-9]+)\)
我来拆解一下每个部分的作用:
\(:转义左括号,因为括号在正则里是特殊符号,必须加反斜杠才能匹配实际的左括号([A-Za-z0-9]+):这是一个捕获组,用来提取我们想要的单词。A-Za-z0-9匹配字母和数字,+表示至少有一个字符(确保不是空的括号)\):转义右括号,和左括号同理
实际代码示例(以Python为例)
拿你给的字符串来测试,代码可以这么写:
import re # 你的目标字符串 target_text = "(ROOT (S (NP (NNP Washington) (NNP (CNN)) (NNP Donald) (NNP Trump)) (VP (VBD was) (VP (VBN asked) (PP ( by) (NP (NP (DT a) (NN member)) (PP (IN of) (NP (DT a) (NNP Fox) (NNP News) (NN town) (NN hall) (NN audience))))) (NP-TMP (DT this) (NN week)) (SBAR (WHNP (WP what)) (S (NP (PRP he)) (VP (MD would) (VP (VB do) (S (VP (TO to) (VP (VB reduce) (N..." # 用正则提取匹配的单词 result = re.findall(r'\(([A-Za-z0-9]+)\)', target_text) print(result) # 输出结果里会包含 ['CNN'],这就是你要的内容
进阶调整
如果你的需求更严格(比如只提取全大写的单词,像例子里的CNN),可以把正则改成:
\(([A-Z]+)\)
这样就只会捕获括号里全是大写字母的单词,过滤掉其他不符合的情况。
为什么这个正则能满足需求?
它只会匹配**括号内只有单个单词(没有空格、嵌套括号)**的情况,像(NNP Washington)这种括号里有空格和其他内容的会被自动排除,正好符合你要的“被左右括号包裹的单个单词”的要求。
内容的提问来源于stack exchange,提问作者Hamid
相关产品推荐
相关产品推荐

