使用python正则表达式删除括号之间的内容

时间:2018-04-19 08:12:50

标签: python regex

我有一个像

这样的文本文件
{[a] abc (b(c)d)}

我想删除这些括号[] and (())之间的内容。所以输出应该是 -

 abc

我删除了括号中的内容,但无法移除此[]之间的内容 我试过下面的代码 -

import re

with open('data.txt') as f:
    input = f.read()
    line = input.replace("{","")
    line = line.replace("}","")
    output = re.sub(r'\(.*\)', "", line)
    print output

输出是 -

[a] abc

首先在我的代码中,我替换{},然后从()中删除内容。我想在此行\[.*\]中添加output = re.sub(r'\(.*\)', "", line)。但是找不到办法做到这一点。我还在学习python。所以我面临这个问题。请帮忙。

3 个答案:

答案 0 :(得分:4)

Imo并不像最初看起来那么容易,你很可能需要一些平衡(递归)的方法,这可以通过newer regex module实现:

import regex as re

string = "some lorem ipsum {[a] abc (b(c)d)} some other lorem ipsum {defg}"

rx_part = re.compile(r'{(.*?)}')
rx_nested_parentheses = re.compile(r'\((?:[^()]*|(?R))*\)')
rx_nested_brackets = re.compile(r'\[(?:[^\[\]]*|(?R))*\]')

for match in rx_part.finditer(string):
    part = rx_nested_brackets.sub('', 
        rx_nested_parentheses.sub('', 
            match.group(1))).strip()
    print(part)

哪会产生

abc
defg

<小时/> 模式是

\(         # opening parenthesis
(?:        # non.capturing group
    [^()]* # not ( nor )
    |      # or
    (?R)   # repeat the pattern
)*
\)

答案 1 :(得分:1)

我尝试了这个,我得到了你想要的输出......我希望我能帮到你

import re

with open('aa.txt') as f:
    input = f.read()
    line = input.replace("{","")
    line = line.replace("}","")
    output = re.sub(r'\[.*\]', "", line)
    output = re.sub(r'\(.*\)', "", output)
    print(output)

答案 2 :(得分:1)

您可以检查字符串是否包含[](<no_parentheses_here>)[no_brackets_here]子字符串,并在匹配时将其删除。

import re                                    # Use standard re
s='{[a] abc (b(c)d)}'
rx = re.compile(r'\([^()]*\)|\[[^][]*]|[{}]')
while rx.search(s):                          # While regex matches the string
    s = rx.sub('', s)                        # Remove the matches
print(s.strip())                             # Strip whitespace and show the result
# => abc

请参阅Python demo

它也适用于配对的嵌套(...)[...]

模式详情

  • \([^()]*\) - (,然后是()以外的任何0 +字符,然后是)
  • | - 或
  • \[[^][]*] - [,然后是[]以外的任何0 +字符,然后是]
  • | - 或
  • [{}] - 与{}匹配的字符类。