2017-02-22 65 views
1

我想在Java中写一个正则表达式获取所有两位数字(两位数字不能以0开头),它不会在前面和随后是一个角色。正则表达式获得2位数字不立即前面和后面跟着一个字符在java

举例来说,我想在下面的字符串匹配数30:

  • character30 wordstart
  • wordstart 30character
  • 30的数量就在这里

但不希望到以下:

  • character30character

我想使用一下变通做到这一点,到目前为止,我来最接近的是: (?<!\w)(1[2-9]|[2-9][0-9])(?!([\w]))

的两位数字不能以0开始,我不想要在三位数字内匹配2位数字。

+2

[\ b \ d {2} | \ d {2} \ b'](https://regex101.com/r/4VgGMU/1)怎么办? –

+1

让我们知道它是否有效。像这样的问题可以以不同的方式回答。如果你至少需要在一个单词边界上使用空格,你需要使用(?<!\ S)\ d {2}(?!\ d)|(?<!\ d)\ d {2} !\ S)'。 –

+0

另一个想法是匹配字母中的两个数字序列并捕获其他字符:\ p {L} \ d {2} \ p {L} |(?<!\ d)\ d {2}(?!\ d)' –

回答

1

您可以使用下面的正则表达式:

(?<!\S)[1-9]\d(?!\d)|(?<!\d)[1-9]\d(?!\S) 

记住要加倍反斜杠时在Java字符串文字中定义正则表达式模式。

的模式匹配:

  • (?<!\S) - 从1位到9,然后任何一个数字
  • (?!\d) - - 下一个数字必须以串
  • 的空白或开始
  • [1-9]\d前面的两位数字不能跟随另一个数字
  • | - 或
  • (?<!\d) - 不能是数字权之前...
  • [1-9]\d - 数字从1到9,然后任何一个数字
  • (?!\S) - 应遵循的空格或字符串的结尾。
0

下面的代码只是简单地测试Wiktor的在Java的评论:

import java.text.SimpleDateFormat; 
import java.util.Locale; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TestIt 
{ 
    public static void main (String args[]) 
     throws Exception 
    { 
     String test1 = "character30 wordstart"; 
     String test2 = "wordstart 30character"; 
     String test3 = "the number 30 is here"; 

     String failTest = "character30character"; 

     String regex = "\\b\\d{2}|\\d{2}\\b"; 

     Pattern pat = Pattern.compile(regex); 
     Matcher match = pat.matcher(test1); 
     System.out.println("test1: " + match.find()); 
     match = pat.matcher(test2); 
     System.out.println("test2: " + match.find()); 
     match = pat.matcher(test3); 
     System.out.println("test3: " + match.find()); 
     match = pat.matcher(failTest); 
     System.out.println("failTest: " + match.find()); 
    } 
} 

有了结果:

test1: true 
test2: true 
test3: true 
failTest: false 
相关问题