开头的特殊字符,与每个单词的结尾匹配[only regex]

时间:2010-08-31 16:33:29

标签: 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' ““

  

如果开头的特殊字符与结尾匹配,则将其删除

我正在学习正则表达式。 [只有正则表达式]

2 个答案:

答案 0 :(得分:1)

对于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

(未测试的)

答案 1 :(得分:1)

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''

让不相同的字符发挥作用的趋势是()[]{}