gpt4 book ai didi

android - 当一个模式出现零次或多次时如何从字符串中提取模式

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:42 26 4
gpt4 key购买 nike

我想提取可以采用两种形式之一的字符串元素。

Form A = "nnnnnnnnntext1=12abc&text2=67xyz&nnnnnnnn"

Form B = "nnnnnnnnntext1=12abc&text3=az345&text2=67xyz&nnnnnnnnnn"

Text1 和 Text2 将始终存在,Text3 可能存在也可能不存在。

我可以使用 2 个独立的模式来做到这一点

Pattern A = Pattern.compile(text1=(.*?)&.*text2=(.*?)&);
Pattern B = Pattern.compile(text1=(.*?)&.*text3=(.*?)&.*text2=(.*?)&)

但是有没有一种方法可以使用单个模式来完成它?是否有可能构建一个模式,如果存在则提取 text1、text2 和 text3,如果不存在则不会失败?

最佳答案

首先,将 .*? 替换为 [^&]* 使模式匹配最后一个值是有意义的,即使它只是在字符串的末尾并使匹配更有效。

要解决这个问题,你需要用一个可选的贪心组将贪心点和捕获组包裹起来:

text1=([^&]*)&(?:.*text3=([^&]*)&)?.*text2=([^&]*)
^^^^^^^^^^^^^^^^^^^^^

参见 regex demo .

详情

  • text1= - 文字
  • ([^&]*) - 第 1 组:& 以外的 0+ 个字符
  • & - 一个&
  • (?:.*text3=([^&]*)&)? - 一个可选的非捕获组,至少尝试一次并匹配 1 次或 0 次出现
    • .* - 除换行符以外的任何 0+ 个字符
    • text3= - 文字
    • ([^&]*) - 第 2 组:& 以外的 0+ 个字符
    • & - 一个&
  • .* - 除换行符以外的任何 0+ 个字符
  • text2= - 文字
  • ([^&]*) - 第 3 组:& 以外的 0+ 个字符

关于android - 当一个模式出现零次或多次时如何从字符串中提取模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363873/

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