繁体   English   中英

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

[英]Replace words starting with a backslash in Python

我需要从字符串中删除以反斜杠开头的单词。 我已经尝试了以下方法(以及一些细微的变化),但这些单词并未删除。

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))

您应该使用:

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

您不需要单词边界\\b ,只需反斜杠和单词字符即可。 单词边界\\b是非单词字符和单词字符之间的虚拟字符,因为非单词字符的示例包括:空格,反斜杠和其他几个字符。 因此,您正在做的工作是检查单词是否开头以及单词是否以反斜杠开头(反斜杠是互斥的)。

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

它以unicode编码,仅一个字符。

另一个例子:

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

要删除不在ascii字符空间(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。

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

简而言之: \\B在非单词char之前的字符串的开头,或者在非单词char之后的字符串的结尾,或者在相同类型的字符之间(即bbb1b_,.等)。

在rexegg.com上查看更多解释非单词边界: \\B

采用

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM