搜索和替换 - .sub(replacement,string [,count = 0]) - 不替换特殊字符\

时间:2017-01-22 21:47:28

标签: python regex string replace special-characters

我有一个字符串,我想用html代码替换特殊字符。代码如下:

s= '\nAxes.axvline\tAdd a vertical line across the axes.\nAxes.axvspan\tAdd a vertical span (rectangle) across the axes.\nSpectral\nAxes.acorr'

p = re.compile('(\\t)')
s= p.sub('<\span>', s)
p = re.compile('(\\n)')
s = p.sub('<p>', s)

此代码使用\t替换字符串中的<\\span>,而不是代码所要求的<\span>

我已经在regex101.com上测试了正则表达式模式,但它确实有效。我无法理解为什么代码不起作用。

我的目标是将输出用作html代码。 &#39;&lt; \ span&gt;&#39;字符串不被HTML识别为标记,因此没用。我必须找到一种方法用&lt; \ span&gt;替换文本中的\ t而不是&lt; \ span&gt;。这在Python中是不可能的吗?我之前发过一个类似的问题但是这个问题没有具体解决我在这里提出的问题,也没有说明我的目标是将更正的文本用作HTML代码。收到的答案没有正常运作,可能是因为回复的人疏忽了这些事实。

1 个答案:

答案 0 :(得分:0)

不,它 工作。只是你打印了repr它。你是在python shell中测试的吗?

在python shell中:

>>> '\\'
'\\'
>>> print('\\')
\
>>> print(repr('\\'))
'\\'
>>>

shell使用None函数输出返回值(如果它不是repr)。要克服 这个,您可以使用print函数,该函数返回None(因此不会被shell输出),以及 不会调用repr函数。

请注意,在这种情况下,您不需要正则表达式。你只需要做一个简单的replace

s = s.replace('\n', '<p>').replace('\t', '<\span>')

而且,对于正则表达式,您应该在字符串前加r

compiled_regex = re.compile(r'[a-z]+\s?') # for example
matchobj = compiled_regex.search('in this normal string')
othermatchobj = compiled_regex.search('in this other string')

请注意,如果您不多次使用编译正则表达式,则可以一步完成此操作

matchobj = re.search(r'[a-z]+\s?', '<- the pattern -> the string to search in')

正则表达式非常强大。不要放弃!