我有以下字符串,我想运行正则表达式(Java):
a#d3d,b#3jjf,c#44k
c#999,b#a1a,a#11a
我想在“c#”之后和下一个逗号(,)之前提取值。我想从第一行提取值“44k”,从第二行提取值“999”。我认为以下内容可行:
.*c#(.*),.*
但事实并非如此。哦,正则表达式的英文解释将帮助我更好地理解你的答案。
答案 0 :(得分:4)
这里是高级lookbehind版本
(?<=c#)[^,\s]+
(?<=c#)
是一个外观断言,它确保模式左侧有c#
。
[^,\s]+
是一个否定的字符类,与量词+
一起,它将匹配至少一个不是逗号或空格的字符。
答案 1 :(得分:2)
c#([^,\s]+)
应该这样做。找到c#
,然后抓取一个或多个不是逗号或空格的字符(表示行尾也结束匹配)。
答案 2 :(得分:1)
c#(.+?)(,|$)
使用此正则表达式
.+?
是一个懒惰的正则表达式。它将匹配所有内容,直到找到逗号或行尾
之后matcher.group(1)将返回您需要的内容。
答案 3 :(得分:1)
我尝试了(?<=c#)[a-z0-9]+
并得到了你想要的东西。
答案 4 :(得分:0)
你需要一个非贪心的通配符:
c#.*?(,|$)
.*?
表示匹配任何字符零次或多次,但匹配尽可能少。
(,|$)
表示匹配逗号或字符串结尾。
答案 5 :(得分:0)
你可以使用这个正则表达式
(c#(.{3}[^, ]+)|$)+
此正则表达式将匹配字符串末尾的c#和字符串末尾的最后一个c#。字符串之间的c#不会被考虑在内,我希望这就是你想要的。
为了获得c#的子字符串,例如“44k”或“999”,你必须在String java中使用子字符串api来从正则表达式中检索值。
希望这有帮助