在Python字符串中的括号前插入反斜杠以转义(插入反斜杠)。

3

我需要格式化许多包含相似结构的字符串:

 u'LastName FirstName (Department / Subdepartment)'

我的愿望是将字符串变成这样:

 u'LastName FirstName \(Department / Subdepartment\)'

我的意思是需要在左括号和右括号前添加反斜杠。

目前我正在用Python实现:

  displayName = displayName.replace('(', '\(').replace(')', '\)').

这看起来还不错,但我在想:

有没有更符合Python习惯的方法呢?

我在Python字符串文档中没有找到合适的方法,也许我正在看错地方...


尝试使用re.escape(string)。 - rajpy
2个回答

4

你已经找到了最具Python特色的方式,正则表达式提供了一种不太易读的解决方案:

>>> import re
>>> s = u'LastName FirstName (Department / Subdepartment)'
>>> print re.sub(r'([()])', r'\\\1', s)
LastName FirstName \(Department / Subdepartment\)

当我尝试这个时,我得到的是:LastName FirstName \\(Department / Subdepartment\\),所以不是一个,而是两个反斜杠。 - Parsa
1
@Parsa,您可能将字符串“repr”与实际打印的字符串混淆了。例如:>>> re.sub(r'([()])', r'\\\1', s) u'LastName FirstName \\(Department / Subdepartment\\)' >>> print(re.sub(r'([()])', r'\\\1', s)) LastName FirstName \(Department / Subdepartment\)。因此,请尝试添加“print(...)”,您会发现它可以正常工作。 - jamylak

2
你可以使用 re.escape('string')
例子:
import re

escaped = re.escape(u'LastName FirstName (Department / Subdepartment)')

注意:
这种方法将返回带有所有非字母数字用反斜杠转义的字符串,包括标点符号和空格。
虽然这对你可能有用。

2
如果字符串中有其他正则表达式元字符,例如 .,它们将被转义为 \. - jamylak
1
如果他需要转义括号,我认为其他类似的转义可能也会有用。不过我可能是错的。 - Serdalis
@Serdalis,我本来会用re的,但是我需要转义括号,因为这个字符串要用于LDAP查询。所以只有括号需要被转义。 - oz123
@Serdalis,另一方面,我确定我不会有点,所以我可以使用你的方法。 - oz123
这是关于编程的内容,请将其从英语翻译成中文。仅返回已翻译的文本:这会删除空格,有时您想保留空格。 - Kay
@Kay 空格被视为非字母数字字符,所以是的,但也许答案没有表述得足够清楚,我会将其表述得更加明确。 - Serdalis

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