我想用如下字符串捕获第三个逗号:
public class RGBtoHSV {
float r;
float g;
float b;
public RGBtoHSV(int red, int green, int blue) {
//Scale to float from 8 bit RGB values
r = red/255;
g = green/255;
b = blue/255;
}
public int[] getHSV() {
float cmax = Math.max(r, Math.max(g, b));
float cmin = Math.min(r, Math.min(g, b));
float deltaC = cmax - cmin;
float h;
if (cmax==r) {
h = (((g-b)/deltaC)%6)*60;
} else if (cmax==g) {
h = (((b-r)/deltaC) + 2)*60;
} else {
h = (((r-g)/deltaC) + 4)*60;
}
float s = 0;
if (cmax!=0) {
s = deltaC/cmax;
}
int[] returnValue = new int[3];
// re-scale
returnValue[0] = (int) h/255;
returnValue[1] = (int) s/255;
returnValue[2] = (int) cmax/255;
return returnValue;
}
除以下内容外,我想到了类似人物的角色
98,52,"110,18479456000019"
但是,结果是捕获了所有逗号。
在那之后,我尝试了一些关于nth捕获的正则表达式-似乎是一种解决方案-但没有任何效果。
如何解决此问题?
答案 0 :(得分:1)
有几种捕获第三个 的方法。 This RegEx是这样做的一种方式:
([\d,])\x22\d+(,)\d+\x22
您想要的 在第二组(,)中,只是为了简单起见,您可以使用 $ 2 进行调用。
为了安全起见,我为此RegEx添加了其他边界,您可以将其删除:
\x22只是“ ,如果需要,您可以替换它:
([\d,])"\d+(,)\d+"
在必要时,您还可以使用( \ )并转义一个字符。
如果您的输入要复杂一些,也许是这样的:
您可以在第三个,之前创建一个中间边界,并在中间边界([\d\w\"]+
)中添加所有可能的字符,例如this RegEx:
(\d+,){2}[\d\w\"]+(,)
并使用 $ 2 捕获第三个 。这次,您还可以从右侧放松表情,并且仍然可以使用。
您还可以在正则表达式中添加开始 ^ :
^(\d+,){2}[\d\w\"]+(,)
作为附加的左边界,这意味着您的输入必须以该表达式开头。