我想使用正则表达式从句子中删除某些单词或字符。
例如-我有一个字符串this is [/.] a string [ra] with [/] something
,我想删除[ra]
,[/.]
而不是[/]
。
我用过:
m = re.sub('\[.*?\]','',n)
效果很好,如何保留此-> [/]
答案 0 :(得分:2)
您可以使用
re.sub(r'\[(?!/])[^][]*]', '', n)
请参见regex demo。
详细信息
\[
-一个[
字符(?!/])
-如果当前位置的右侧紧邻/]
,则负向搜索将使匹配失败。[^][]*
-除[
和]
以外的0多个字符]
-一个]
字符。答案 1 :(得分:1)
使用此模式\[(?!\/\])[^\]]+\]
,并将所有匹配项替换为空字符串。
说明:它将[
与\[
匹配,然后确保,后面的不是\]
,所以我们不匹配[\]
,因为它是负数前瞻:(?!\/\])
,然后将其匹配所有内容,直到]
和]
本身与模式[^\]]+\]
([^\]]+
匹配一个或多个字符,然后匹配]
)。
答案 2 :(得分:1)
您可以使用交替方式在组中捕获要保留的内容,并与要删除的内容匹配。
result = re.sub(r"(\[/])|\[[^]]+\]", r"\1", n)
说明
(\[/])|\[[^]]+\]
(\[/])
分组捕获[/]
|
或\[[^]]+\]
使用否定的字符类将左方括号匹配到右方括号替换为第一个捕获组\1