gpt4 book ai didi

python - 正则表达式将 "escaped"字符替换为其原始字符

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:56 27 4
gpt4 key购买 nike

注意:我不会使用正则表达式解析大量 html 或通用 html。我知道这很糟糕

TL;DR:

我有像这样的字符串

A sentence with an exclamation\! Next is a \* character

原始标记中存在“转义”字符的地方。我希望用他们的“原件”替换它们。并得到:

A sentence with an exclamation! Next is a * character
<小时/>

我有一点数据需要从一些 wiki 标记中提取。

我在这里只处理段落/片段,所以我不需要一个强大的解决方案。在python中,我尝试了一个测试:

s = "test \\* \\! test * !! **"

r = re.compile("""\\.""") # Slash followed by anything

r.sub("-", s)

这应该产生:

test - - test * !! **

但它没有做任何事情。我在这里遗漏了什么吗?

此外,我不确定如何用原始字符替换任何给定的转义字符,因此我可能只会使用特定的正则表达式创建一个列表和子,例如:

\\\*

\\!

可能有一种更简洁的方法来做到这一点,因此非常感谢任何帮助。

最佳答案

您缺少一些东西,即 r 前缀:

r = re.compile(r"\\.") # Slash followed by anything

python 和 re 都将含义附加到 \ 上;当您将字符串值传递给 re.compile() 时,双反斜杠将变成一个反斜杠,此时 re 会看到 \.,这意味着字面上的句号。:

>>> print """\\."""
\.

通过使用 r'' 你告诉 python 不要解释转义码,所以现在 re 被赋予一个带有 \\. 的字符串,表示字面上的反斜杠后跟任何字符:

>>> print r"""\\."""
\\.

演示:

>>> import re
>>> s = "test \\* \\! test * !! **"
>>> r = re.compile(r"\\.") # Slash followed by anything
>>> r.sub("-", s)
'test - - test * !! **'

经验法则是:定义正则表达式时,使用 r'' 原始字符串文字,这样您就不必对 Python 和正则表达式语法都有意义的所有内容进行双重转义。

接下来,您要替换“转义”字符;为此使用组,re.sub() 允许您引用组作为替换值:

r = re.compile(r"\\(.)") # Note the parethesis, that's a capturing group
r.sub(r'\1', s) # \1 means: replace with value of first capturing group

现在的输出是:

>>> r = re.compile(r"\\(.)") # Note the parethesis, that's a capturing group
>>> r.sub(r'\1', s)
'test * ! test * !! **'

关于python - 正则表达式将 "escaped"字符替换为其原始字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com