1

'[' または ']' の前に '\' を追加する必要がある文字列があります。それ以外の場合、括弧は常に数字を囲みます。

例: 'Foo[123].bar[x]'になる必要があり'Foo\[123\].bar[x]'ます。

これを達成するための最良の方法は何ですか?事前にどうもありがとう。

4

3 に答える 3

8

このようなものはうまくいくはずです:

>>> import re
>>>
>>> re.sub(r'\[(\d+)\]', r'\[\1\]', 'Foo[123].bar[x]')
'Foo\\[123\\].bar[x]'
于 2012-08-16T21:33:40.263 に答える
6

次のような正規表現に手を伸ばすことなく実行できます。

s.replace('[', '\[').replace(']', '\]').replace('\[x\]', '[x]')
于 2012-08-16T21:33:57.793 に答える
0

[]別のアプローチとして、 が前後にない場合にのみスラッシュを前に置きx]ます[x

result = re.sub(r"(\[(?!x\])|(?<!\[x)\])", r"\\\1", subject)

説明:

# (\[(?!x\])|(?<!\[x)\])
# 
# Match the regular expression below and capture its match into backreference number 1 «(\[(?!x\])|(?<!\[x)\])»
# Match either the regular expression below (attempting the next alternative only if this one fails) «\[(?!x\])»
# Match the character “[” literally «\[»
# Assert that it is impossible to match the regex below starting at this position (negative lookahead) «(?!x\])»
# Match the character “x” literally «x»
# Match the character “]” literally «\]»
# Or match regular expression number 2 below (the entire group fails if this one fails to match) «(?<!\[x)\]»
# Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind) «(?<!\[x)»
# Match the character “[” literally «\[»
# Match the character “x” literally «x»
# Match the character “]” literally «\]»
于 2012-08-16T21:38:09.353 に答える