有没有更好的方法不用placehold来交换字符串

2024-06-02 05:53:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串:

>>> s = 'Y/NOUN/dobj>_hold/VERB/ROOT_<membership/NOUN/dobj_<with/ADP/prep_<X/PROPN/pobj_>,/PUNCT/punct'

目的是把Y/的位置改成X/,例如:

>>> s.replace('X/', '@@').replace('Y/', 'X/').replace('@@', 'Y/')
'X/NOUN/dobj>_hold/VERB/ROOT_<membership/NOUN/dobj_<with/ADP/prep_<Y/PROPN/pobj_>,/PUNCT/punct'

假设在进行替换时没有冲突,即X/Y/是唯一的,并且在原始字符串中只发生一次。你知道吗

有没有办法在没有占位符的情况下进行替换?目前,我正在使用@@占位符交换位置。你知道吗


Tags: 字符串withrootreplacemembershipnounverbprep
1条回答
网友
1楼 · 发布于 2024-06-02 05:53:42

在Python中,使用regex的一种简单方法是通过re.sub替换部分中的lambda,您可以在其中评估/检查捕获组捕获的文本,并选择适当的替换:

因此,(X|Y)/我假设XY可能是多字符字符串占位符,否则使用([XY]))应该可以:

import re
s = 'Y/NOUN/dobj>_hold/VERB/ROOT_<membership/NOUN/dobj_<with/ADP/prep_<X/PROPN/pobj_>,/PUNCT/punct'
print(s)
print(re.sub(r"(X|Y)/", lambda m: "Y/" if m.group(1) == 'X' else 'X/' , s))

输出:

Y/NOUN/dobj>_hold/VERB/ROOT_<membership/NOUN/dobj_<with/ADP/prep_<X/PROPN/pobj_>,/PUNCT/punct
X/NOUN/dobj>_hold/VERB/ROOT_<membership/NOUN/dobj_<with/ADP/prep_<Y/PROPN/pobj_>,/PUNCT/punct

相关问题 更多 >