用正则表达式去除标点符号 - python

Strip punctuation with regular expression - python

我想去除字符串开头和结尾的所有标点符号(点除外),但不去除字符串的中间部分。

例如对于原始字符串:

@#%%.Hol$a.A.$%

我想从单词的结尾和开头而不是从单词的中间删除单词 .Hol$a.A.

另一个例子可能是字符串:

@#%%...&Hol$a.A....$%

在这种情况下,返回的字符串应该是..&Hol$a.A....,因为我们不关心允许的字符是否重复。

想法是删除单词开头和结尾的所有标点符号(点除外)。一个词定义为\wand/or一个.

一个实际的例子是字符串'Barnes&Nobles'。对于文本分析,将 Barnes&Nobles 识别为单个实体很重要,但没有 '

如何使用 Regex 实现目标?

根据你对标点符号进行条带化的含义,你可以修改以下代码:

import re
res = re.search(r"^[^.]*(.[^.]*.([^.]*.)*?)[^.]*$", "@#%%.Hol$a.A.$%")
mystr = res.group(1)

这将去除表达式中点前后的所有内容。 警告,如果字符串不匹配,您将必须检查 None 的结果是否不同。

使用这个简单易用的正则表达式:

[\w.].*[\w.]

它将完全匹配您想要的结果,仅此而已。

  • [\w.] 匹配任何字母数字字符和点
  • .* 匹配任何字符(通常换行符除外)
  • [\w.] 匹配任何字母数字字符和点

要更改分隔符,只需更改 [] 括号内的允许字符集即可。

Check this regex out on regex101.com

import re
data = '@#%%.Hol$a.A.$%'
pattern = r'[\w.].*[\w.]'
print(re.search(pattern, data).group(0))
# Output: .Hol$a.A.