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

Python字符串中括号前的转义(插入反斜杠),python,escaping,Python,Escaping,我需要格式化许多包含类似结构的字符串: u'LastName FirstName (Department / Subdepartment)' 我的愿望是让字符串看起来像这样: u'LastName FirstName \(Department / Subdepartment\)' 这意味着我需要在开始括号和结束括号中添加反斜杠 到目前为止,我正在使用Python执行此操作: displayName = displayName.replace('(', '\(').replace(')

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

 u'LastName FirstName (Department / Subdepartment)'
我的愿望是让字符串看起来像这样:

 u'LastName FirstName \(Department / Subdepartment\)'
这意味着我需要在开始括号和结束括号中添加反斜杠

到目前为止,我正在使用Python执行此操作:

  displayName = displayName.replace('(', '\(').replace(')', '\)').
这看起来不错,但我只是想知道:

有没有更像蟒蛇的方法


我没有找到合适的方法,但可能我找错了地方…

您已经找到了最具python风格的方法,regex提供了一个不那么可读的解决方案:

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

您已经找到了最具python风格的方法,regex提供了一个不那么可读的解决方案:

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

例如:

import re

escaped = re.escape(u'LastName FirstName (Department / Subdepartment)')
注:
此方法将返回所有非字母数字反斜杠(包括标点和空格)的字符串

尽管这可能对您有用。

您可以使用

例如:

import re

escaped = re.escape(u'LastName FirstName (Department / Subdepartment)')
注:
此方法将返回所有非字母数字反斜杠(包括标点和空格)的字符串


尽管这可能对您有用。

尝试re.escape(string)。尝试re.escape(string)。如果字符串中有其他regex元字符,如
,该怎么办?它们将转义到
\。
如果他需要转义括号,我假设其他此类转义可能有用。但是,我可能错了。@Serdalis,我会使用
re
,但我只需要转义括号,因为这个字符串将转到LDAP查询。因此,只需对括号进行转义。@Serdalis,另一方面,我确信,我不会在括号内有点,因此我可以使用您的方法。此方法删除空格,有时您希望保留空格。如果字符串中有其他正则表达式元字符,如
,该怎么办?它们将转义到
\。
如果他需要转义括号,我假设其他此类转义可能有用。但是,我可能错了。@Serdalis,我会使用
re
,但我只需要转义括号,因为这个字符串将转到LDAP查询。因此,只需对括号进行转义。@Serdalis,另一方面,我确信,我的括号内不会有点,所以我可以使用你的方法。这会删除空格,有时你想保留空格。当我尝试这样做时,我得到:
LastName FirstName\\(Department/Subdepartment\\)
,但是有两个反斜杠。@Parsa您可能把字符串
repr
与实际打印的字符串混淆了。例如<代码>>>>re.sub(r'([()]),r'\\\1',s)
u'LastName FirstName\\\(部门/子部门\)\
>>print(re.sub(r'([()]),r'\\\1',s)
LastName FirstName\\(部门/子部门\)
。因此,尝试添加
print(…)
,当我尝试此操作时,您会看到它工作正常:
LastName FirstName\\(Department/Subdepartment\\)
所以不是一个反斜杠,而是两个反斜杠。@Parsa您可能将字符串
repr
与实际打印的字符串混淆了。例如<代码>>>>re.sub(r'([()]),r'\\\1',s)
u'LastName FirstName\\\(部门/子部门\)\
>>print(re.sub(r'([()]),r'\\\1',s)
LastName FirstName\\(部门/子部门\)
。所以试着添加
print(..)
,你会发现它是有效的