替换Python中以反斜杠开头的单词

时间:2016-06-14 13:15:15

标签: python regex backslash

我需要从字符串中删除以反斜杠开头的单词。我尝试了以下(和轻微的变化),但不删除单词。

test = "(students \u2019 education, 1, 3) || (DCUCampaign 8, 2, 2) || (Projects Stories, 1, 2) || (DCU, 14, 1) || (\u201c DCU graduate \u201d, 1, 4)"

以下是我试过的正则表达式:

re.sub(r"\b\\\w+", "", str(test))

4 个答案:

答案 0 :(得分:2)

您应该使用:

re.sub(r"\\\w+", "", str(test))

您不需要单词边界\b,只需要反斜杠和单词字符。 单词边界\b是非单词字符和单词字符之间的虚拟字符,因为非单词字符的示例:空格,反斜杠和其他几个字符。所以你正在做的是检查一个单词是否开始,并且单词以反斜杠开头,这是互斥的。

答案 1 :(得分:1)

\u2019实际上不是\u2019,而是Right Single Quotation Mark:'

它以unicode编码,只是一个字符。

另一个例子:

这是换行符:\n在您的代码中,这不会打印\n而是打印新行(例如按 ENTER )。

要删除不在ascii caracter空间(0到127)中的所有unicode值,请使用以下代码:

text = "".join([i if ord(i) < 128 else "" for i in text])

或者,如果您想用空格" "替换它们:

text = "".join([i if ord(i) < 128 else " " for i in text])

你也可以使用如下的正则表达式:

re.sub(r"[^\x00-\x7F]+", " ", text)

注意:\x7F是十六进制的127。

答案 2 :(得分:1)

由于\是非单词字符,为防止在\word中匹配text\word,您需要使用\B - 非单词在\b不匹配的地方匹配的边界

简而言之:\B匹配非字字符之前的字符串开头,或非字字符之后的字符串末尾,或相同类型的字符之间(即bbb1b_,.等。)

查看更多解释here, Not-a-word-boundary: \B at rexegg.com

使用

re.sub(r"\B\\\w+", "", str(test))
         ^^

如果您需要识别非字边界Unicode,请不要忘记传递flags=UNICODE

答案 3 :(得分:0)

正如更多人在评论中指出的那样,\u2019实际上是一个unicode转义序列,它将扩展为。此功能仅适用于Python 3+,您可以将其替换为:r'\u2019'。或者在Python 2中使用u'\u2019'

但是你很快就会注意到只替换那一个字符,如果你想要替换所有非ascii字符,请使用以下正则表达式:

r'[^\x00-\x7F]+'