gpt4 book ai didi

python - 在python中用正则表达式拆分字符串的某些部分

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:39 24 4
gpt4 key购买 nike

我有 _AHDHDUHD[Tsfs (SGYA)]AHUDSHDI_ 形式的不同字符串,我想删除 (SGYA) 部分(圆括号中的字母总是大写) ) 和它之前或之后的最终空格。所以结果应该是_AHDHDUHD[Tsfs]AHUDSHDI_

我想到了将方括号中的内容与 ([A-Z_])(\[.+\])([A-Z_]) 进行匹配,然后进行拆分并使用 re 模块重新插入它(虽然我不确定哪个 re 函数适合这个)。

但是,这感觉不雅。是否有一个 regex 可以直接执行我想要的操作,而无需中间步骤?

最佳答案

你可以使用

re.sub(r'(\[[^][]*?)\s*\([A-Z]*\)\s*([^][]*])', r'\1\2', text)

参见 regex demo

详情

  • (\[[^][]*?) - 第 1 组:[,然后是 [ 以外的任何 0+ 个字符和 ] 尽可能少
  • \s* - 0+ 个空格
  • \( - 一个 ( 字符
  • [A-Z]* - 0+ 大写 ASCII 字母
  • \) - 一个 ) 字符
  • \s* - 0+ 个空格
  • ([^][]*]) - 第 2 组:][ 以外的任何 0+ 个字符(多达可能)然后是 ]

Python demo :

import re
rx = r"(\[[^][]*?)\s*\([A-Z]*\)\s*([^][]*])"
s = "_AHDHDUHD[Tsfs (SGYA)]AHUDSHDI"
print( re.sub(rx, r'\1\2', s) )
# => _AHDHDUHD[Tsfs]AHUDSHDI

另一个想法:只删除在 [...] 子字符串中找到的所有 \s*\([A-Z]+\)\s* 匹配项:

import re
s = "_AHDHDUHD[Tsfs (SGYA)]AHUDSHDI"
print( re.sub(r"\[[^][]+]", lambda x: re.sub(r'\s*\([A-Z]+\)\s*', "", x.group()), s) )
# => _AHDHDUHD[Tsfs]AHUDSHDI

参见 another Python demo .

在这里,\[[^][]+] 模式将找到 [ 的所有 block ,然后是方括号以外的 1+ 个字符,然后是 ],然后任何出现的 0+ 空格、(、1+ 大写 ASCII 字母、) 和 0+ 空格将仅在匹配项内被删除使用 \[[^][]+] 模式找到。

关于python - 在python中用正则表达式拆分字符串的某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com