我想从字符串中提取子字符串,例如
案例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组:除换行字符外的任何零个或多个字符,尽可能多