首页 > 解决方案 > Python RegEx 在分隔符之前和之后将文本与整个文本分组?

问题描述

我是一名 CS 学生,我们的教授给了我们这个我翻译得很差的“例子”,但它应该:

“获取内括号数据并去掉相关的括号,然后添加文本的其余部分,中间有一个空格”。

import re pattern=re.compile(r'\(.*?\)') res=pattern.search('(Today is a nice and sunny)day!)') print(res.group())

我看到应该是什么结果:

(Today is a nice and sunny)
(Today is a nice and sunny day!)

但是代码只打印前者,我尝试通过将整个内容括在括号中并更改表达式来弄乱 res.groups() 但只是无法弄清楚如何使它产生一个在第一个停止的组)括号和一个忽略它的括号

标签: pythonregex

解决方案


正则表达式不能以这种方式工作的原因是因为它不是以使用多个捕获组的方式编写的。为了解决这个问题,我创建了两个捕获组,一个将在第一个捕获,第二个将捕获剩余的一天部分。

   import re
   pattern = re.compile(r'(\(.*?\))(.*\))?')
   res = pattern.search('(Today is a nice and sunny)day!)')

   #This will print (Today is a nice and sunny)day!)
   print(res.group())

   #This will print (Today is a nice and sunny)
   print(res.groups()[0])

然后我不得不单独调用res.groupandres.groups因为res.group将返回完整匹配res.groups并将返回元组中的子匹配组。然后我索引返回res.groups以获得第一个捕获组结果。

有关 Regex 中捕获组的信息,请查看


推荐阅读