Python -用通配符替换括号之间的字符串



我试图从字符串中删除一些文本。我想要删除的可能是下面列出的任何一个例子。基本上是大写和小写的任意组合,末尾是整数的任意组合,末尾是字母的任意组合。也可以有空格,也可以没有。

  • (磁盘1)
  • (磁盘5)
  • (Disc2)
  • (磁盘10)
  • (部分)
  • (Pt B)
  • (磁盘)
  • (CD 7)
  • (cD X)

我已经有一个方法来获取开头"(type">

)
multi_disk_search = [ '(disk', '(disc', '(part', '(pt', '(prt' ]
if any(mds in fileName.lower() for mds in multi_disk_search): #https://stackoverflow.com/a/3389611
for mds in multi_disk_search:
if mds in fileName.lower():
print(mds)
break

返回(disc

不能只用圆括号分开,因为其他圆括号中可能有其他标签。也没有特定的顺序标签。我要找的人通常是最后一个;然而很多时候它不是。

我认为解决方案将需要正则表达式,但我真的迷路了,当它涉及到。

我试过了,但是它返回的东西对我来说没有任何意义。

regex = re.compile(r"s*%ss*" % (mds), flags=re.I) #https://stackoverflow.com/a/20782251/11214013
regex.split(fileName)
newName = regex
print(newName)

返回re.compile('\s*\(disc\s*', re.IGNORECASE)

有哪些方法可以解决这个问题?

可能是这样的:

rx = re.compile(r'''
(
(?: dis[ck] | p(?:a?r)?t )
[ ]?
(?: [a-z]+ | [0-9]+ )
)''', re.I | re.X)

此模式只使用regex模式的基本语法,除了X标志,Verbose模式(使用此模式时,模式中的任何空白字符都会被忽略,除非它被转义或在字符类中)。请随意阅读有关re模块的python手册。添加对CD的支持作为练习。

>>> import re
>>> def remove_parens(s,multi_disk_search):
...     mds = '|'.join([re.escape(x) for x in multi_disk_search])
...     return re.sub(f'((?:{mds})[0-9A-Za-z ]*)','',s,0,re.I)
...
>>> multi_disk_search = ['disk','cd','disc','part','pt']
>>> remove_parens('this is a (disc a) string with (123xyz) parens removed',multi_disk_search)
'this is a  string with (123xyz) parens removed'

相关内容

  • 没有找到相关文章

最新更新