正则表达式和一个特殊字符本身

3

我想将字符&替换为and,但仅当&单独存在时。 我在Python 2.7.3中尝试以下方法:

import re
re.sub('&', 'and', '& r&b')

我明白你想要的是 and r&b,而不是 and randb

re.sub('\b&\b', 'and', '& r&b')

这也不起作用。 有什么建议吗?此外,如果我只想要普通字符和特殊字符的唯一组合,例如,如果我想要a&b,但不想要a&bc,应该怎么做?

在类似问题中找不到答案,提前感谢!


1
http://www.regular-expressions.info/wordboundaries.html - Marc B
谢谢,马克。这个链接没有涉及如何处理特殊字符,但它对我理解正则表达式很有帮助。 - user1106278
2个回答

3

不知道“by itself”是什么意思。顺便说一下,在正则表达式中没有人知道那是什么意思。

对于你的具体示例,

搜索(^| )&( |$)
替换为$1and$2

虽然不知道Python。

编辑:在Python中

import re
re.sub('(^| )&( |$)', r'\1and\2', '& r&b')

这是完全正确的。在Python中,它将是re.sub('(^| )&( |$)', r'\1and\2', '& r&b')。 - Joeyjoejoejr

1

& 被视为非单词字符。因此,只需使用这个简单的替换。

注意:这对于正常文本中的大多数常见情况都有效。

>>> re.sub(r" & ", " and ", " & r&b")
' and r&b'

它几乎适用于所有情况,但是如果您在任何其他非单词字符旁边有&,它也会匹配。因此,您的字符串“&!”将通过。 - Joeyjoejoejr
感谢您的观察。我很困惑为什么\b没有起作用。似乎&有一个特殊情况。我正在努力理解它。 - varunl
似乎\b检查的只是行首、行尾或非单词字符到单词字符的转换。因此,/b适用于单词字符a-zA-Z0-9_,但不适用于非单词字符。\B似乎处理相反的单词。我仍在努力理解这个。 - Joeyjoejoejr
如果需要的话,请编辑我的帖子。我现在正在用手机回答。 - varunl
感谢你们两个的尝试。 - user1106278

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接