python - 正则表达式排除方括号内的所有内容,但不排除大括号内的方括号内容
问题描述
我有一个包含一组字符串的列表-
mylist = ['abc','[apple','banana','cucumber]','efg','{','egg','[fff]','ginger }','end;','abc1','[','apple1','banana1','cucumber1',']','efg1','{','egg1','[fff1]','ginger1 }','end1;']
将所有字符串组合在一起以应用正则表达式以排除方括号内的内容:
newlist = ['|'.join(mylist)]
Output newlist : ['abc|[apple|banana|cucumber]|efg|{|egg|[fff]|ginger }|end;|abc1|[ |apple1|banana1|cucumber1|]|efg1|{|egg1|[fff1]|ginger1 }|end1;']
使用正则表达式来元素方括号内容 -
newlist1 =[re.sub('\[.+?\]','',newlist[0])
Output of newlist2- ['abc||efg|{|egg||ginger }|end;|abc1||efg1|{|egg1||ginger1 }|end1;']
它也消除了大括号内的方括号内容..
Expected output : ['abc||efg|{|egg|[fff]|ginger }|end;|abc1||efg1|{|egg1|[fff1]|ginger1 }|end1;']
解决方案
虽然这不是您要求的答案,但我希望它会对您有所帮助。首先我预处理文本,然后应用正则表达式。
import re
def preprocess(text):
CurluBrace=False
for i in range(len(text)):
c=text[i]
if c=='[' and CurluBrace==False:
text=text[:i]+'`'+text[i+1:]
if c==']' and CurluBrace==False:
text=text[:i]+'`'+text[i+1:]
if c=='{':
CurluBrace=True
if c=='}':
CurluBrace=False
return text
def main():
text='abc|[apple|banana|cucumber]|efg|{|egg|[fff]|ginger }|end;|abc1|[ |apple1|banana1|cucumber1|]|efg1|{|egg1|[fff1]|ginger1 }|end1;'
processedText=preprocess(text)
newlist1 =[re.sub('\`.+?\`','',processedText)]
print(newlist1)
更优雅的解决方案:
import re
def preprocess(text):
CurlyBraceContext=0
for i in range(len(text)):
c=text[i]
if CurlyBraceContext<=0:
if c=='[' or c==']':
text=text[:i]+'`'+text[i+1:]
if c=='{':
CurlyBraceContext+=1
if c=='}':
CurlyBraceContext-=1
return text
def main():
text='abc|[apple|banana|cucumber]|efg|{|egg|[fff]|ginger }|end;|abc1|[ |apple1|banana1|cucumber1|]|efg1|{|egg1|[fff1]|ginger1 }|end1;'
processedText=preprocess(text)
newlist1 =[re.sub('\`.+?\`','',processedText)]
print(newlist1)
推荐阅读
- bitbucket-pipelines - 使用 bitbucket-pipelines 将相同的分支部署到多个环境
- sql - 如何使用 SQL 按升序对包含 varchar 和 numeric 的列进行排序?
- c# - 将画布转换为图像时 UWP 应用程序挂起
- c++ - 有条件地在 C++ 类中启用构造函数
- selenium - 无法在硒的框架内定位元素
- intellij-idea - IntelliJ - 使用自动格式化/重新格式化时展开 Angular 导入
- xml - 在 xslt 中选择标签值
- python - 如何让 print() 在同一行接受用户输入?
- javascript - 如何使用liveScroll取消选择primefaces dataTable中的所有内容
- php - 在magento的客户发票中的送货地址中添加公司名称