使用正则表达式下面的我尝试匹配两个组,第一个是所有文本,直到达到句号为止,第二个是数字0或1。
这是我正在尝试的正则表达式:function f = ncx2pdf(x, n, lambda, term = 32)
f = exp(-lambda/2) * arrayfun(@(x) sum_expression([0:term],x,n,lambda), x);
function t = sum_expression(j,v,n,l)
# j is vector, v is scalar.
numerator = (l/2).^j .* v.^(n/2+j-1) * exp(-v/2);
denominator = factorial(j) .* 2.^(n/2+j) .* gamma(n/2+j);
t = sum(numerator ./ denominator);
end
end
代码:
"\\..+?(?=0|1)"
打印: final String regex = "\\..+?(?=0|1)";
final String string = "this is a test 123. 1";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
如何匹配.
中的this is a test 123.
和group(0)
中的1
?
答案 0 :(得分:1)
您可以使用以下正则表达式:
final String regex = ".*\\.(?=\\s*([01]))";
final String string = "this is a test 123. 1";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
}
请参见Java demo。
模式详细信息
.*\.
-(这将是组0的值)除换行符以外的任何0+字符,应尽可能多,直到最后一个.
(包括它)(?=\\s*([01]))
-一个正向超前查询,需要0+个空格,然后紧接当前位置右侧的1
或0
(捕获到组1中)。答案 1 :(得分:1)
您的(.*?\.)(.*?[10])
不符合您的要求。
这是您的Pattern
目前解析的内容:
Pattern
根据定义,非捕获构造不能被反向引用(即,您永远不能通过调用| literal dot
| | followed by any 1+ sequence reluctantly quantified
| | | followed by non-capturing 1 or 2
| | |
\\..+?(?=0|1)
来获取它们的值)。
这是您想要的一个简单示例:
Matcher#group
输出
String test = "this is a test 123. 1";
// | group 1: any 1+ char sequence reluctantly quantified,
// | | followed by a dot, non-capturing here
// | |
// | | | any character reluctantly quantified
// | | | (here, your whitespace)
// | | | | group 2: 1 or 2
Pattern p = Pattern.compile("(.+?)(?=\\.).*?([01])");
Matcher m = p.matcher(test);
if (m.find()) {
System.out.printf("Group 1: %s%nGroup 2: %s%n", m.group(1), m.group(2));
}
注释
Group 1: this is a test 123
Group 2: 1
始终代表整个比赛。 0
。请参阅组和捕获部分here。
似乎您对解析最后的1
/ 0
数字的要求有些松懈。您可能想问自己,该数字是否将被“隔离”,例如包含非数字字符,或者可能是较大数字序列的一部分,等等。
答案 2 :(得分:1)
数字始终是末尾的0
还是1
?
是否需要使用正则表达式?
int fullStop = string.indexOf(".");
if (fullStop != -1) {
System.out.println(string.substring(0, fullStop));
System.out.println(string.substring(fullStop + 1).trim());
}
输出:
这是一个测试123
1
答案 3 :(得分:0)
尝试使用正则表达式setErrors({ errors })
并捕获组1和2