gpt4 book ai didi

python - 有没有更好的方法来交换没有占位符的字符串

转载 作者:行者123 更新时间:2023-12-01 03:47:43 24 4
gpt4 key购买 nike

我有一个字符串:

>>> 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/ 是唯一的,并且在原始字符串中只会发生一次。

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

最佳答案

在 Python 中,使用正则表达式的一种简单方法是通过 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

关于python - 有没有更好的方法来交换没有占位符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38735328/

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