在regexpre python中查找两个parantence之间的单个单词

sczxawaw  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(98)

我对正则表达式了解不多。我需要提取字符串中由左右括号括起来的单个单词。
例如,在string

(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) (NP (JJ violent) (NN crime)) (PP (IN in) (NP (DT the) (NNS country's) (JJ inner) (NN cities.)))))))))))))) (NN debate,)) (ADJP (JJ due) (S (VP (TO to) (VP (VB be) (VP (VBN broadcast) (S (NP (JJ live)) (ADJP (RBS most) (RB everywhere.))))))))))))))))

我需要得到(CNN)( by)子字符串。

编辑

def fixeup_tree_string(T):
            change_index=[]
            Match = [(m.start(0), m.end(0),'Y') for m in re.finditer(r"\(\s*[\w|#|~|!|@|#|$|%|^|&|*|<|>|.|,|;|:|`|'''|_|-|+|/]+\s*\)", T)]
            if len(Match)==0:
            return T

            if Match[0][0]!=0:
            change_index.append((0,Match[0][0],'N'))
            for i in range(len(Match)-1):
                change_index.append(Match[i])
                change_index.append((Match[i][1],Match[i+1][0],'N'))
                change_index.append(Match[-1])
                if Match[len(Match)-1][1]< len(T):
                  change_index.append((Match[len(Match)-1][1],len(T),'N'))

            new_T = []
            for r in change_index:
            if r[2]=='N':
                for i in range(r[0],r[1]):
                    new_T.append(T[i])
            else:
                str = T[r[0]:r[1]].replace(' ','')
                str = str.split(')')[0].split('(')[-1]
                str = '(NN '+str +')'
                for x in str:
                    new_T.append(x)
            new_T = (''.join(new_T))
            return new_T
wa7juj8i

wa7juj8i1#

您可以尝试:

y = re.findall(r"\(\s*[a-zA-Z]+\s*\)", x)

其中x是输入。

**注意-**您必须在程序前使用import re语句导入re,以使用正则表达式函数

说明-

re.findall是一个返回正则表达式找到的匹配数组的模块。参数如下:regex, string
r"\(\s*[a-zA-Z]+\)"指定正则表达式是由r在开始时给出的 raw string
\(表示左括号'('
\s*表示左括号后面可以跟xero或更多空格
[a-zA-Z]+匹配里面的字母(一个或多个)
\s*表示文本后面可以有零个或多个空格,然后\)表示结尾')'

编辑1 -

为了回答你在评论中的第二个疑问,你可以试试这个:

z = []

for i in y:
    str = "(NN " + i[1:]
    z.append(str)

print(z)

相关问题