gpt4 book ai didi

java - 使用正则表达式获取特殊字符之间的文本

转载 作者:行者123 更新时间:2023-11-30 03:47:17 25 4
gpt4 key购买 nike

我正在尝试获取特殊字符“|”之间的单词其格式为[a-z]+@[0-9]+

示例文本 -

||ABC@123|abc@123456||||||ABcD@12||

预期输出 -

ABC@123, abc@123456, ABcD@12

我正在使用的正则表达式

(?i)\\|[a-z]+@[0-9]+\\|

当我使用这个正则表达式时,我得到的输出是 |ABC@123|

我犯了什么错误?有人可以帮我解决这个问题吗?

最佳答案

您需要使用匹配的Lookaround,但不要将其包含在匹配中。

(?<=\||^)[a-z]+@[0-9]+(?=\||$)

这是regex101 online demo

示例代码:

String pattern = "(?i)(?<=\\||^)[a-z]+@[0-9]+(?=\\||$)";
String str = "|ABC@123|abc@123456|ABcD@12";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.println(m.group());
}

输出:

ABC@123
abc@123456
ABcD@12
<小时/>

Lookaheadlookbehind 统称为 lookaround,是零长度断言。不同之处在于,lookaround 实际上匹配字符,但随后放弃匹配,只返回结果:匹配或不匹配。这就是为什么它们被称为“断言”。

Read more...

模式解释:

  (?<=                     look behind to see if there is:
\| '|'
| OR
^ the beginning of the line
) end of look-behind

[a-z]+ any character of: 'a' to 'z' (1 or more times)
@ '@'
[0-9]+ any character of: '0' to '9' (1 or more times)

(?= look ahead to see if there is:
\| '|'
| OR
$ the end of the line
) end of look-ahead

关于java - 使用正则表达式获取特殊字符之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338558/

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