提取方括号之间的初始子字符串之后的文本



我想从字符串中提取子字符串,例如

案例1:

text = "some_txt" # → some_txt

案例2:

text = "[info1]some_txt" #  → some_txt

案例3:

text = "[info1][info2] some_text" # → some_txt

案例4:

text = "[info1][info2] some_text_with_[___]_abc" # → some_text_with_[___]_abc

我做的是

match = re.search("^[.+] (.*)", text)
if match:
result = match.group(1)

它工作正常,除了情况4,它只给出abc。我想换成some_text_with_[___]_abc

任何帮助都将不胜感激。

使用当前代码,您可以使用

r"^(?:[[^][]+](?:s*[[^][]+])*)?s*(.*)"

请参阅regex演示。

如果您实际上对是否匹配不感兴趣,可以使用re.sub使用从字符串的开头删除这些带括号的子字符串

re.sub(r'^[[^][]+](?:s*[[^][]+])*s*', '', text)

请参阅另一个regex演示。

Regex详细信息

  • ^-字符串的开头
  • (?:[[^][]+](?:s*[[^][]+])*)?-的可选出现
    • [[^][]+]-一个[,然后尽可能多地使用除[]之外的任何一个或多个字符,然后使用]
    • (?:s*[[^][]+])*-零次或多次出现零个或多个空白,然后是一个[,然后是尽可能多的除[]之外的任何一个或多个子字符,然后是]
  • s*-零个或多个空白
  • (.*)-第1组:除换行字符外的任何零个或多个字符,尽可能多

最新更新