re.sub 贪婪字符

1 投票
3 回答
548 浏览
提问于 2025-04-17 13:18

我想从我的字符串中去掉那些以"\"开头的文本,比如:

 \xf, \africa\87, \ckat\x70, ...

有没有办法使用贪婪字符在re.sub中做到这一点呢?

例如:

line = re.sub("[\.*]", "", line)

谢谢!

编辑:

输入示例:

" lorem ipsum \xe2\x80\x9csianhill7 lorem ipsum"

输出:

" lorem ipsum lorem ipsum"

3 个回答

1
regex = re.compile(r"""
                    \\\S+\s*
                    """, re.VERBOSE)
line = r" lorem ipsum \xe2\x80\x9csianhill7 lorem ipsum"
replaced = regex.sub("", line)

注意,你需要告诉Python把'\'当作普通字符来处理,而不是当作转义字符。你可以在字符串前面加一个r来实现这一点。

我还假设你想要删除所有从'\'开始的文本,一直到下一个空格字符为止,包括这个空格。

1

要匹配的表达式是:

[\b\\][\w]+,?

使用你的输入文本“lorem ipsum”,上面的表达式只会匹配你想要去掉的内部单词哦 :)

这是一个示例链接

我还添加了一些其他的正则表达式,用来匹配字符串中的 ,,并在 \ 后面使用了 *,表示可以有0个或多个字符。

[\b\\][\w.,]*

这是另一个示例链接

3

如果我理解你的问题没错的话,你是想从你的句子中去掉所有不是ASCII字符开头的单词。

你可以通过一次简单的循环来做到这一点,使用ordinal matchfilter,而不需要用到正则表达式

>>> data = " lorem ipsum \xe2\x80\x9csianhill7 lorem ipsum"
>>> ' '.join(e for e in data.split() if 31 < ord(e[0]) < 127)
'lorem ipsum lorem ipsum'

撰写回答