使用正则表达式删除仅包含重复字符'x'的单词

3

我有以下文本:

text = "upi xxxxxxxxxx manoj jayant xxx xxxxxxx532kvblhii"

我正在尝试去除只包含x的重复模式,以获得如下输出:

out = "upi manoj jayant xxxxxxx532kvblhii"

我使用了以下正则表达式,但是结果不正确。
re.sub('[x]', '', text)

out = "upi  manoj jayant 532kvblhii"

请帮我修正我的正则表达式。

2个回答

3

使用单词边界来表示完全由x组成的单词:

text = "upi xxxxxxxxxx manoj jayant xxx xxxxxxx532kvblhii"
out = re.sub(r'\s*\bx+\b\s*', ' ', text)
print(out.strip())

这将打印:

upi manoj jayant xxxxxxx532kvblhii

这里的逻辑是坚持仅将xxx作为整个单词匹配。我们还会消耗两端的所有空格,并替换为一个空格,以保持其与周围其他单词的分离。这样做存在一个边缘情况,可能会在输出的开头和结尾留下额外的空格,我们会将其去除。

1
您可以使用正则表达式和非正则表达式两种方法:
# Without regex:
text = "upi xxxxxxxxxx manoj jayant xxx xxxxxxx532kvblhii"
print( " ".join([x for x in text.split() if x != len(x) * x[0] ]) )
# => upi manoj jayant xxxxxxx532kvblhii

# With regex:
import re
print( re.sub(r'\s*\bx+\b', '', text).lstrip() )
upi manoj jayant xxxxxxx532kvblhii

请查看Python演示正则表达式演示

无正则解决方案详细信息

  • 使用text.split()通过空格分割字符串
  • if x != len(x) * x[0]的意思是,我们丢弃所有包含与单词中字符数相同数量的第一个字符的单词。

正则表达式详细信息

  • \s* - 零个或多个空格
  • \b - 单词边界
  • x+ - 一个或多个x字符
  • \b - 单词边界。

请注意,只有当xxx单词出现在字符串开头并且可能存在不受欢迎的前导空格时,才需要使用.lstrip()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接