gpt4 book ai didi

python - 使用正则表达式 python 时出现由 `|` 分隔的标记错误

转载 作者:行者123 更新时间:2023-12-02 17:23:57 25 4
gpt4 key购买 nike

我想在每个标签之前添加|。请检查我使用过的以下代码。

tags = ['XYZ', 'CREF', 'BREF', 'RREF', 'REF']

string_data = 'XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY'

for each_tag in tags:
result = string_data.replace(each_tag, "|" + each_tag)
print(result)

如何使用正则表达式来做到这一点?

输入字符串:

XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY

实际结果(错误):

XYZ:MUMBAI UNIVERSITYC|REF:PUNE UNIVERSITYB|REF:DADAR UNIVERSITYR|REF:KOLHAPUR UNIVERCITY LLC|REF:SOLAPUR UNIVERSITY

预期结果:

|XYZ:孟买大学|CREF:PUNE UNIVERSITY|BREF:DADAR UNIVERSITY|RREF:KOLHAPUR UNIVERCITY LLC|REF:SOLAPUR UNIVERSITY

有没有办法使用正则表达式来做到这一点?

最佳答案

由于您最重要的问题是正确拆分字符串,因此我尝试仅解决这个问题。您可以在之后追加或添加 |

这种模式似乎有效:

(XYZ|CREF|BREF|RREF|REF):[a-zA-Z\\s]+?(LLC)?(?=(XYZ|CREF|BREF|RREF|REF)|$)

说明:

  1. (XYZ|CREF|BREF|RREF|REF): : 这是显而易见的。您正在寻找标签的开头。顺序很重要。即,将最短的子字符串 REF 保留在末尾。
  2. [a-zA-Z\\s]+? : 匹配标签后面出现的任何字符和空格,勉强。不情愿,因为如果引擎到达 CREF 的开头,我们希望它停在那里,而不是“贪婪地”获取更多字符。由于使用了“不情愿”,第(4)点中的标签顺序很重要。
  3. (LLC)? : 这是一种异常(exception)列表,其中包含所有以标签可能开头的字符序列结尾的已知单词。 (为此,我想不出任何其他方法。)异常列表必须是已知的并且可以单独配置并附加到模式运行时。如果输入数据结构事先已知并且此类异常是有限的且已知的,则这不是瓶颈。否则,是的。
  4. (?=(XYZ|CREF|BREF|RREF|REF)|$) : 前瞻,确保引擎在找到其中一个标签时停止接下来。如果没有更多标签,$ 允许在输入末尾停止。

这将为您提供的输入字符串提供以下输出:

XYZ:MUMBAI UNIVERSITY
CREF:PUNE UNIVERSITY
BREF:DADAR UNIVERSITY
RREF:KOLHAPUR UNIVERCITY LLC
REF:SOLAPUR UNIVERSITY

编辑

添加我测试的Python 3.8.1代码:

import re

s = "XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY"

p = "(XYZ|CREF|BREF|RREF|REF):[a-zA-Z\\s]+?(LLC)?(?=(XYZ|CREF|BREF|RREF|REF)|$)"

matches = re.finditer( p,s )

tag_list = [ m.group() for m in matches ]
s2 = "|" + "|".join( tag_list )
print( s2 )

关于python - 使用正则表达式 python 时出现由 `|` 分隔的标记错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60389540/

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