gpt4 book ai didi

python - 我如何制作一个找到第一个内部对词的正则表达式?

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:29 25 4
gpt4 key购买 nike

我想制作一个正则表达式来捕获第一对内部单词。我的以下代码在一种情况下有效,但在另一种情况下无效。它捕获最后一对单词。

请查看下面我的代码。

def testReplaceBetweenWords():

head_dlmt='Head'
tail_dlmt='Tail'

line0 = "abc_Head_def_Head_inner_inside_Tail_ghi_Tail_jkl"
line1 = "abc_Head_first_Tail_ghi_Head_second_Tail_opq"

between_pattern = "(^.*(?<={0}))(?!.*{0}).*?(?={1})(.*)$".format(head_dlmt, tail_dlmt)
compiled_pattern = re.compile(between_pattern)

# Case 0: good case: It captures the first inner words.
result0 = re.search(compiled_pattern, line0)

print("original 0 : {0}".format(result0.group(0)))
print("expected Head : abc_Head_def_Head")
print("found Head : {0}".format(result0.group(1)))
print("expected Tail : Tail_ghi_Tail_jkl")
print("found Tail : {0}{1}".format(' ' * (result0.regs[2][0]), result0.group(2)))

print()

# Case 1: Bad case: It captures the last pair words.
result1 = re.search(compiled_pattern, line1)

print("original 1 : {0}".format(result1.group(0)))
print("expected Head : abc_Head")
print("found Head : {0}".format(result1.group(1)))
print("expected Tail : Tail_ghi_Head_second_Tail_opq")
print("found Tail : {0}{1}".format(' ' * (result1.regs[2][0]), result1.group(2)))

输出如下。

original 0    : abc_Head_def_Head_inner_inside_Tail_ghi_Tail_jkl
expected Head : abc_Head_def_Head
found Head : abc_Head_def_Head
expected Tail : Tail_ghi_Tail_jkl
found Tail : Tail_ghi_Tail_jkl

original 1 : abc_Head_first_Tail_ghi_Head_second_Tail_opq
expected Head : abc_Head
found Head : abc_Head_first_Tail_ghi_Head
expected Tail : Tail_ghi_Head_second_Tail_opq
found Tail : Tail_opq

第一种情况效果很好。它捕获第一个内部对词。第二种情况不起作用。它捕获了最后一对单词,但我期望第一对单词。如何制作满足以上两种情况的正则 express ?

非常感谢。

最佳答案

使用以下正则表达式:

between_pattern = "^((?:(?!{1}).)*{0}).*?({1}.*)$".format(head_dlmt, tail_dlmt)

参见 online Python demoregex demo .

详情

  • 第一个 .* 模式应该替换为一个经过调整的贪婪标记 (?:(?!{1}).)* 匹配任何 0+ 个字符不要开始结束分隔符字符序列(因此,您可以直到最后一个不包含 TailHead)
  • 在捕获组中使用环视是没有意义的,因为这些模式将成为那些捕获组的一部分

请注意,您可能希望使用 re.S 标志编译正则表达式以支持带换行符的字符串。

关于python - 我如何制作一个找到第一个内部对词的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50167021/

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