【问题标题】:Strip punctuation with regular expression - python用正则表达式去除标点符号 - python
【发布时间】:2016-05-02 05:10:39
【问题描述】:

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

例如对于原始字符串:

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

我想将 .Hol$a.A. 从末尾和开头删除,但不要从单词中间删除。

另一个例子是字符串:

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

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

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

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

如何使用 Regex 实现目标?

【问题讨论】:

  • @LaxmikantGurnalkar:这不是重复的。
  • @user2288043:您能发布更多示例吗?只有一个对于覆盖可能存在的其他情况不是很有用。
  • 如果有多个点,例如:- @#%%....Hol$a.A....$%
  • 我添加了有关该问题的更多详细信息,以便对其他人也有用。不过,@ByteCommander 的回复解决了,谢谢!

标签: python regex strip


【解决方案1】:

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

[\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.

【讨论】:

  • 考虑到用户没有提供太多细节或更多示例,这是一个通用的。
  • 这很有魅力....点的数量并不重要...另一个例子可以是字符串@#%%....Hol$a.A....$% in this如果返回值应该是 ....Hol$a.A....
  • @user2288043 如果此答案解决了您的问题,请点击其左侧的检查按钮接受它。
【解决方案2】:

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

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

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

【讨论】:

  • 这仅在结果字符串由点分隔时才有效,对吗?这项工作有一个更通用(也更简单)的表达方式。
  • 如果点之前有一个字母,那么它就不起作用:@#%%a.Hol$a.A.$%
  • 是的,但问题缺乏细节。我以为他想在第一个点之前和最后一个点之后剥离任何东西。如果你想只删除某些字符,那么正则表达式不是要走的路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
相关资源
最近更新 更多