正则表达式只匹配字符串中的一个字符序列

时间:2013-08-15 22:44:53

标签: java regex

我在jList中有一个字符串,我希望用正则表达式进行拆分(如果需求发生变化,将来会很简单)

字符串看起来很像这样:

ID:GF68464,名称:productname

ID可以是字母和数字的任意组合,可以是任意长度。

我只希望ID匹配,即不包括“ID:”以及ID后面的逗号后面的任何内容。

这是我迄今为止所拥有的,但它似乎没有按照我的要求去做

[^ID: ][a-zA-Z1-9][^,^.]

进一步信息(编辑)

我计划提取ID以匹配数组。 (因此需要正则表达式)。这可以用不同的方式完成吗?

4 个答案:

答案 0 :(得分:4)

你可以试试这个:

ID:\s*(\w+),

并提取第一个捕获组。您也可以使用lookarounds(+1到@ p.s.w.g)。


String str = "ID: GF68464, Name: productname";

Matcher m = Pattern.compile("ID:\\s*(\\w+),").matcher(str);
if (m.find()) {
    System.out.println(m.group(1));
}
GF68464

答案 1 :(得分:3)

您可以尝试使用lookarounds

(?<ID:\s*)\w+(?=,)

这将匹配前面带有"ID:"的一个或多个单词字符的任意序列和任意数量的空格字符,后跟逗号。

答案 2 :(得分:0)

您想要的是一个非捕获组。已经有一些相当高质量的例子在Java上用SO做了这个 - 例如,这个问题:What is a non-capturing group? What does a question mark followed by a colon (?:) mean?

答案 3 :(得分:0)

创建一个像/ ^ [a-z A-Z 0-9] *的正则表达式,然后使用可以使用匹配函数并使用值匹配[0]如

var regex = /^[a-z A-Z 0-9]*\,/;
var matches = your_string.match(regex);
var required_value = matches[0];

希望这会有所帮助