如何使用正则表达式提取此内容

时间:2012-02-10 06:44:39

标签: java regex

我有以下字符串,我想运行正则表达式(Java):

a#d3d,b#3jjf,c#44k
c#999,b#a1a,a#11a

我想在“c#”之后和下一个逗号(,)之前提取值。我想从第一行提取值“44k”,从第二行提取值“999”。我认为以下内容可行:

.*c#(.*),.*

但事实并非如此。哦,正则表达式的英文解释将帮助我更好地理解你的答案。

6 个答案:

答案 0 :(得分:4)

这里是高级lookbehind版本

(?<=c#)[^,\s]+

here on Regexr

(?<=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来从正则表达式中检索值。

希望这有帮助