gpt4 book ai didi

python - 正则表达式仅在特定字符不成对时才拆分该字符

转载 作者:行者123 更新时间:2023-12-01 06:18:26 24 4
gpt4 key购买 nike

this thread 中找到最快的字符串替换算法之后,我一直在尝试修改其中之一以满足我的需要,特别是 this one由 gnibbler 提供。

我将在这里再次解释这个问题,以及我遇到的问题。

假设我有一个如下所示的字符串:

str = "The &yquick &cbrown &bfox &Yjumps over the &ulazy dog"

您会注意到字符串中的很多位置都有一个 & 符号,后跟一个字符(例如“&y”和“&c”)。我需要用字典中的适当值替换这些字符,如下所示:

dict = {"y":"\033[0;30m",
"c":"\033[0;31m",
"b":"\033[0;32m",
"Y":"\033[0;33m",
"u":"\033[0;34m"}

使用我之前的线程中提供的 gnibblers 解决方案,我将其作为我当前的解决方案:

myparts = tmp.split('&')
myparts[1:]=[dict.get(x[0],"&"+x[0])+x[1:] for x in myparts[1:]]
result = "".join(myparts)

这适用于正确替换字符,并且对于未找到的字符不会失败。唯一的问题是没有简单的方法实际上在输出中保留&符号。我能想到的最简单的方法是将我的字典更改为包含:

dict = {"y":"\033[0;30m",
"c":"\033[0;31m",
"b":"\033[0;32m",
"Y":"\033[0;33m",
"u":"\033[0;34m",
"&":"&"}

并更改我的“split”调用,以对后面没有其他&符号的&符号进行正则表达式分割。

>>> import re
>>> tmp = "&yI &creally &blove A && W &uRootbeer."
>>> tmp.split('&')
['', 'yI ', 'creally ', 'blove A ', '', ' W ', 'uRootbeer.']
>>> re.split('MyRegex', tmp)
['', 'yI ', 'creally ', 'blove A ', '&W ', 'uRootbeer.']

基本上,我需要一个正则表达式来分割一对中的第一个&符号,以及每个单个&符号,以便我可以通过字典转义它。

如果有人有更好的解决方案,请随时告诉我。

最佳答案

您可以使用负向后查找(假设有问题的正则表达式引擎支持它)来仅匹配不跟在另一个 & 符号后面的 & 符号。

/(?<!&)&/

关于python - 正则表达式仅在特定字符不成对时才拆分该字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1936837/

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