比赛直到句号

时间:2018-10-25 10:45:44

标签: java regex

使用正则表达式下面的我尝试匹配两个组,第一个是所有文本,直到达到句号为止,第二个是数字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

4 个答案:

答案 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+个空格,然后紧接当前位置右侧的10(捕获到组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

Regex