我正试图在特殊字符“|”之间获取单词其格式为[a-z]+@[0-9]+
。
示例文字 -
||ABC@123|abc@123456||||||ABcD@12||
预期产出 -
ABC@123, abc@123456, ABcD@12
正则表达式我正在使用
(?i)\\|[a-z]+@[0-9]+\\|
当我使用这个正则表达式时,我得到的输出是|ABC@123|
我在做什么错?有人可以帮帮我吗?
答案 0 :(得分:2)
您需要使用匹配但不包含该匹配项的Lookaround。
(?<=\||^)[a-z]+@[0-9]+(?=\||$)
示例代码:
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
Lookahead
和lookbehind
,统称为lookaround
,是零长度断言。区别在于环视实际匹配字符,但随后放弃匹配,仅返回结果:匹配或不匹配。这就是他们被称为“断言”的原因。
模式说明:
(?<= 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
答案 1 :(得分:0)