gpt4 book ai didi

Java 正则表达式 带有小字母的下划线位于左侧​​,等于中间,任意位于右侧

转载 作者:行者123 更新时间:2023-12-01 07:18:48 28 4
gpt4 key购买 nike

我正在逐行读取文件,并且只需要如下行:

gui_test=Hallo
gui_test_hello=Hello

所以左侧只是由_分隔的小写字母单词。中间始终是 =,右侧可以是任何内容。

我做了这个正则表达式:

^(([a-z]+_[a-z]+)+=.*)$

问题是,它正在工作

gui_pfc_button_ok=Ok!

但不适用于:

gui_pfcuser_opportunitydetails_label_title=label Title

我不知道我的问题出在哪里。

最佳答案

简介

您面临的问题是正则表达式仅捕获组中的最后一个匹配项(至少在大多数引擎中;.net 是一个异常(exception))。您正在使用 ([a-z]+_[a-z]+)+ ,虽然这是有效的,但您只匹配与此模式匹配的最后一个匹配项,因此,您只能得到l_title。由于匹配是贪婪的,因此您会得到 l_ 因为之前的匹配占用了尽可能多的字符。分割一下,您实际上是通过以下方式进行匹配的:

  • gui_pfcuse
  • r_opportunitydetail
  • s_labe
  • l_title

如果下划线之间只有 1 个字母,例如 something_here_a_test,您当前的正则表达式也会失败。查看正在使用的正则表达式here

<小时/>

代码

See regex in use here

^([a-z]+(?:_[a-z]+)*)=(.*)$

您还可以使用 ^((?:[a-z]+_)*[a-z]+)=(.*)$ 但效率较低(比上面的正则表达式使用更多步骤) .

<小时/>

结果

输入

gui_test=Hallo gui_test_hello=Hello
gui_pfcuser_opportunitydetails_label_title=label Title
gui_pfc_button_ok=Ok!
something_here_a_test=More words

输出

  1. 匹配:gui_test=Hallo gui_test_hello=Hello
    • 第 1 组:gui_test
    • 第 2 组:Hallo gui_test_hello=Hello
  2. 匹配:gui_pfcuser_opportunitydetails_label_title=标签标题
    • 第 1 组:gui_pfcuser_opportunitydetails_label_title
    • 第 2 组:标签标题
  3. 匹配:gui_pfc_button_ok=好的!
    • 第 1 组:gui_pfc_button_ok
    • 第 2 组:好的!
  4. 匹配:something_here_a_test=更多单词
    • 第 1 组:something_here_a_test
    • 第 2 组:更多单词
<小时/>

说明

  • ^ 断言位置位于行首
  • ([a-z]+(?:_[a-z]+)*) 将以下内容捕获到捕获组 1 中
    • [a-z]+ 匹配任何小写 ASCII 字母一次或多次
    • (?:_[a-z]+)* 匹配以下任意次数。如果您需要至少一个匹配项,则可以将 * 更改为 +,这样最终会得到 (?:_[a-z]+)+
      • _ 按字面意思匹配
      • [a-z]+ 匹配任何小写 ASCII 字母一次或多次
  • = 按字面意思匹配
  • (.*) 将任何字符(换行符除外)捕获到捕获组 2
  • $ 断言位置位于行尾

关于Java 正则表达式 带有小字母的下划线位于左侧​​,等于中间,任意位于右侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871282/

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