Python 开头与每个单词结尾匹配的特殊字符[仅限正则表达式]

Python 开头与每个单词结尾匹配的特殊字符[仅限正则表达式],python,regex,Python,Regex,使用正则表达式从每个单词的开头和结尾删除特殊字符的最佳解决方案是什么 “as df——as df——as df(as df)‘as df’asdf asdf(asd-f asdf’asd-f’-asdf-%asdf%s asdf&$asdf$+asdf+asdf++asdf’” 输出应为: “as df——as df-as df(as df)as df asdf asdf”(asd-f asdf'asd-f'asdf%asdf%s asdf和asdf asdf asdf++asdf“”” 如果开

使用正则表达式从每个单词的开头和结尾删除特殊字符的最佳解决方案是什么

“as df——as df——as df(as df)‘as df’asdf asdf(asd-f asdf’asd-f’-asdf-%asdf%s asdf&$asdf$+asdf+asdf++asdf’”

输出应为:

“as df——as df-as df(as df)as df asdf asdf”(asd-f asdf'asd-f'asdf%asdf%s asdf和asdf asdf asdf++asdf“””

如果开始处的特殊字符与结束符匹配,请将其删除

我正在学习regex。
[仅限正则表达式]

对于Perl,如何使用
/\b([^\s\w])\w+\1\b/g
?请注意,像\b这样的东西并不适用于所有正则表达式语言

噢,正如@Nick指出的,这不适用于不相同的对,比如()[]等等

相反,你可以做:

 s/\b([^\s\w([\]){}])\w+\1\b/\2/g
 s/\b\((\w+)\)\b/\1/g
 s/\b\[(\w+)\]\b/\1/g
 s/\b\{(\w+)\}\b/\1/g
(未经测试)


让不相同的字符工作是一件棘手的事情,
()
[]
{}

似乎在您的示例输入或输出中有一个错误…在第一行的末尾,
+asdf+
变成了
asdf++
?另外,确切的“特殊字符”集合是什么?例如,除空格外的所有非字母数字字符?什么构成单词边界?是否应删除多个匹配的特殊字符,或仅删除一对?此外,正则表达式语言有多种方言,因此,如果您希望得到适合您的答案,则指定方言会很有帮助。这并不是OP想要的,即
asdf asdf)
不得altered@M42有点固定,有一个警告
是不同的字符。
import re
a = ("as-df-- as-df- as-df (as-df) 'as-df' asdf-asdf) (asd-f"
     "asdf' asd-f' -asdf- %asdf%s asdf& $asdf$ +asdf+ asdf++ asdf''")
b = re.sub(r"((?<=\s)|\A)(?P<chr>[-()+%&'$])([^\s]*)(?P=chr)((?=\s)|\Z)",r"\3",a)
print b
as-df-- as-df- as-df (as-df) as-df asdf-asdf) (asd-f
asdf' asd-f' asdf %asdf%s asdf& asdf asdf asdf++ asdf''