如果内容包含任何非数字,则使用正则表达式删除括号和内容

Using Regex to remove brackets and contents if the contents contain any non digits

如果 [] 中至少有一个非数字,我想删除 [] 和内容。

输入:Tag1[aA], Tag2[55].AA[*], Tag3[A1];

输出:Tag1, Tag2[55].AA, Tag3;

我试过下面的方法,但它只适用于括号内的完全匹配。

import re

line = "'Tag1[aA], Tag2[55].AA[*], Tag3[A1];"

# removes the [] if contents contain non digits only
pattern = r'\[\D+\]'
s = re.sub(pattern, '', line)
print(s)

> "'Tag1, Tag2[55].AA, Tag3[A1];"

import re

line = "'Tag1[aA], Tag2[55].AA[*], Tag3[A1];"
re.sub(r'\[[a-zA-Z*]{1,}[\d]{0,}\]', r'', line)

使用这段代码,我也考虑了一些额外的情况。

import re

line = "'Tag1[aA], Tag2[55].AA[*], Tag3[A1],Tag4[34],Tag5[1B];"

# removes the [] if contents contain non digits only
pattern = r'(\[\D.+?\]?|\[.\D.+?\]?)'
s = re.sub(pattern, '', line)
print(s)

输出: 'Tag1, Tag2[55].AA, Tag3,Tag4[34],Tag5;

您可以使用:

\[[^][]*[^][\d][^][]*]

模式匹配:

  • \[ 匹配 [
  • [^][\d]* 可选择匹配除 []
  • 之外的任何字符
  • [^][\d] 匹配 [ ] 或数字
  • 以外的单个字符
  • [^][\d]* 可选择匹配除 []
  • 之外的任何字符
  • ] 匹配 ]

Regex demo

import re

print(re.sub(r"\[[^][]*[^][\d][^][]*]", "", "Tag1[aA], Tag2[55].AA[*], Tag3[A1];"))

输出

Tag1, Tag2[55].AA, Tag3;