我想把所有的标点符号(点除外)从字符串的开头和结尾去掉,而不是在字符串的中间。
例如,对于原始字符串:
@#%%.Hol$a.A.$%
我希望把单词.Hol$a.A.
从结尾和开头删除,而不是从单词的中间删除。
另一个例子可以是字符串:
@#%%...&Hol$a.A....$%
在这种情况下,返回的字符串应该是..&Hol$a.A....
,因为我们不关心是否重复允许的字符。
这个想法是删除所有的标点符号(除了点),就在单词的开头和结尾。单词被定义为\w
和/或.
一个实际的例子是字符串'Barnes&Nobles'
。对于文本分析来说,将Barnes&Nobles
识别为单个实体非常重要,但不需要'
。
如何使用Regex实现目标?
发布于 2016-05-02 05:58:21
使用这个简单且易于调整的正则表达式:
[\w.].*[\w.]
它将完全符合你想要的结果,仅此而已。
[\w.]
匹配任何字母数字字符和点。.*
匹配任何字符(通常换行符除外)[\w.]
匹配任何字母数字字符和点。要更改分隔符,只需更改[]
括号内的一组允许字符。
import re
data = '@#%%.Hol$a.A.$%'
pattern = r'[\w.].*[\w.]'
print(re.search(pattern, data).group(0))
# Output: .Hol$a.A.
发布于 2016-05-02 05:20:06
根据标点符号条带的含义,您可以修改以下代码:
import re
res = re.search(r"^[^.]*(.[^.]*.([^.]*.)*?)[^.]*$", "@#%%.Hol$a.A.$%")
mystr = res.group(1)
这将剥去表达式中的点之前和之后的所有内容。警告,如果字符串不匹配,则必须检查结果是否与None不同。
https://stackoverflow.com/questions/36975349
复制相似问题