我有一个像
这样的文本文件{[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。所以我面临这个问题。请帮忙。
答案 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 +字符,然后是]
|
- 或[{}]
- 与{
或}
匹配的字符类。