gpt4 book ai didi

python - re.sub 用于以特殊字符开头的字符串

转载 作者:行者123 更新时间:2023-12-04 07:30:41 26 4
gpt4 key购买 nike

对不起,如果这个问题看起来与我发现的其他问题太相似。这是使用 re.sub 替换字符串中精确字符的一种变体。
我有一个看起来像的字符串:

C1([*:5])C([*:6])C2=NC1=C([*:1])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*:10])C(=N4)C([*:3])=C5C([*:11])=C([*:12])C(=C2([*:4]))N5
例如,我只想将 '*:1' 替换为 'Ar'。我目前的尝试是这样的:
smiles_all='C1([*:5])C([*:6])C2=NC1=C([*:1])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*:10])C(=N4)C([*:3])=C5C([*:11])=C([*:12])C(=C2([*:4]))N5'
print(smiles_all)
new_smiles=re.sub('[*:]1','Ar',smiles_all)
print(new_smiles)
C1([*:5])C([*:6])C2=NC1=C([*Ar])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*Ar0])C(=N4)C([*:3])=C5C([*Ar1])=C([*Ar2])C(=C2([*:4]))N5
正如你所看到的,这仍然改变了之前的 10,11 等值。我尝试了不同的变体,我选择了 [*:1],但这也是不正确的。这里的任何帮助将不胜感激。在我当前的输出中, * 也仍然存在。这需要交换,以便 *:1 变成 Ar
这是输出应该是什么的示例
C1([*:5])C([*:6])C2=NC1=C([Ar])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*:10])C(=N4)C([*:3])=C5C([*:11])=C([*:12])C(=C2([*:4]))N5
*编辑:
在某一时刻,这个问题被标记为由这个问题回答:
Escaping regex string
当我按照建议实现 re.escape 时,我仍然收到错误消息:
new_smiles=re.sub(re.escape('*:1'),'Ar',smiles_all)



C1([*:5])C([*:6])C2=NC1=C([*:1])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*:10])C(=N4)C([*:3])=C5C([*:11])=C([*:12])C(=C2([*:4]))N5
C1([*:5])C([*:6])C2=NC1=C([Ar])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([Ar0])C(=N4)C([*:3])=C5C([Ar1])=C([Ar2])C(=C2([*:4]))N5

最佳答案

鉴于:

smiles_all='C1([*:5])C([*:6])C2=NC1=C([*:1])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*:10])C(=N4)C([*:3])=C5C([*:11])=C([*:12])C(=C2([*:4]))N5'

desired='C1([*:5])C([*:6])C2=NC1=C([Ar])C3=C([*:7])C([*:8])=C(N3)C([*:2])=C4C([*:9])=C([*:10])C(=N4)C([*:3])=C5C([*:11])=C([*:12])C(=C2([*:4]))N5'
您正在尝试替换文字字符串 [*:1][Ar] .在正则表达式中,表达式 [*:1]是一个字符类,该类中的单个字符与一个匹配项相匹配。如果您添加任何 regex repetition对于字符类,它将以任何顺序匹配这些字符,直到重复限制。
替换文字 [*:1] 的最简单方法与 [Ar]是使用 Python 的字符串方法:
>>> smiles_all.replace('[*:1]','[Ar]')==desired 
True
如果要使用正则表达式,则需要转义这些元字符以获取文字字符串:
>>> re.sub(r'\[\*:1\]', "[Ar]", smiles_all)==desired
True
或者让 Python 为你做转义:
>>> re.sub(re.escape(r'[*:1]'), "[Ar]", smiles_all)==desired
True

关于python - re.sub 用于以特殊字符开头的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67952637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com