替换 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
是非单词字符和单词字符之间的虚拟字符,因为非单词字符的示例:space、反斜杠和其他一些字符。所以你所做的是检查一个单词是否以反斜杠开头,这是互斥的。
正如更多人在评论中指出的那样,\u2019
实际上是一个unicode转义序列,将扩展为’
。此功能仅在 Python 3+ 中,您可以将其替换为:r'\u2019'
。或者在 Python 2 中 u'\u2019'
.
但是您很快就会注意到它只会替换那个字符,但是如果您想替换所有非 ascii 字符,请使用以下正则表达式:
r'[^\x00-\x7F]+'
\u2019
实际上不是 \u2019
而是 Right Single Quotation Mark
: '
编码为unicode
,只有一个字符。
另一个例子:
这是换行符:\n
在您的代码中,这不会打印 \n
而是换行符(例如按 ENTER)。
要删除所有不在 ascii 字符 space(0 到 127)中的 unicode 值,请使用以下代码:
text = "".join([i if ord(i) < 128 else "" for i in text])
或者如果你想用白色替换它们space " "
:
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
匹配非单词字符之前的字符串开头,或非单词字符之后的字符串末尾,或相同类型的字符之间 (即在 bb
、b1
、b_
、,.
等之间)。
查看更多解释here, Not-a-word-boundary: \B
at rexegg.com。
使用
re.sub(r"\B\\w+", "", str(test))
^^
如果您需要识别非单词边界 Unicode,请不要忘记传递 flags=UNICODE
.
我需要从字符串中删除以反斜杠开头的单词。我已经尝试了以下(和轻微的变化)但是没有删除这些词。
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
是非单词字符和单词字符之间的虚拟字符,因为非单词字符的示例:space、反斜杠和其他一些字符。所以你所做的是检查一个单词是否以反斜杠开头,这是互斥的。
正如更多人在评论中指出的那样,\u2019
实际上是一个unicode转义序列,将扩展为’
。此功能仅在 Python 3+ 中,您可以将其替换为:r'\u2019'
。或者在 Python 2 中 u'\u2019'
.
但是您很快就会注意到它只会替换那个字符,但是如果您想替换所有非 ascii 字符,请使用以下正则表达式:
r'[^\x00-\x7F]+'
\u2019
实际上不是 \u2019
而是 Right Single Quotation Mark
: '
编码为unicode
,只有一个字符。
另一个例子:
这是换行符:\n
在您的代码中,这不会打印 \n
而是换行符(例如按 ENTER)。
要删除所有不在 ascii 字符 space(0 到 127)中的 unicode 值,请使用以下代码:
text = "".join([i if ord(i) < 128 else "" for i in text])
或者如果你想用白色替换它们space " "
:
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
匹配非单词字符之前的字符串开头,或非单词字符之后的字符串末尾,或相同类型的字符之间 (即在 bb
、b1
、b_
、,.
等之间)。
查看更多解释here, Not-a-word-boundary: \B
at rexegg.com。
使用
re.sub(r"\B\\w+", "", str(test))
^^
如果您需要识别非单词边界 Unicode,请不要忘记传递 flags=UNICODE
.