[英]Java REGEX to match an exact number of digits in a string
我试图在问题历史记录中找到问题的答案,但是当他们浏览了我放弃的数十个匹配答案后,它们又回到了一千多个。 所以这是我的问题。
我希望能够找到一个字符串中正好六个数字的第一个序列。 给定字符串“某些文本987654321和一些其他文本123456,以及其他一些文本再次654321和最后还有更多文本”,我想找到与123456序列匹配的正则表达式。
我是regex的新手,对它如何工作的简短解释会很有帮助。
先感谢您
您可以使用模式(?<!\\d)\\d{6}(?!\\d)
,它表示“字符串位置,其后没有数字;紧随其后的是六位数字;然后是字符串-没有数字的位置”。 (符号(?<!...)
,被称为否定的后向断言 ,表示“不以...
开头”。符号(?!...)
,被称为否定的前瞻性断言 ,表示“未跟随”。由...
”。记号\\d
表示数字,该符号{n}
是指“n次”,使得例如\\d{6}
的意思是“六位数字”)。
可能看起来像这样:
final String number;
{
final Matcher m = Pattern.compile("(?<!\\d)\\d{6}(?!\\d)").matcher(input);
if(m.find())
number = m.group(); // retrieve the matched substring
else
number = null; // no match found
}
注意:此答案的先前版本建议使用单词边界\\b
; 但是您的评论之一表明,数字可能会紧跟在繁体中文字符之前或之后,繁体中文字符被视为文字字符(因此不会触发文字边界),因此我将其更改。
您正在寻找的模式是:
(?x) # enable comments
(?<! \p{Nd} ) # no decimal number before
\p{Nd} {6} # exactly six repetitions of a decimal number
(?!= \p{Nd} ) # no decimal number after
那也会像
U+FF10 0 FULLWIDTH DIGIT ZERO
U+FF11 1 FULLWIDTH DIGIT ONE
U+FF12 2 FULLWIDTH DIGIT TWO
U+FF13 3 FULLWIDTH DIGIT THREE
U+FF14 4 FULLWIDTH DIGIT FOUR
U+FF15 5 FULLWIDTH DIGIT FIVE
U+FF16 6 FULLWIDTH DIGIT SIX
U+FF17 7 FULLWIDTH DIGIT SEVEN
U+FF18 8 FULLWIDTH DIGIT EIGHT
U+FF19 9 FULLWIDTH DIGIT NINE
如果您有中文文本。
您发布的字符串中首次出现的6位数字实际上是987654
。 如果您是第一次出现6位数字,然后用非数字字符包围,那么应该可以:
(?<!\d)(\d{6})(?!\d)
编辑:此方法使用一个否定的后向和否定的前瞻。 它与单词边界方法稍有不同,因为它将与以下字符串中的123456
匹配
123456asdf some text hello
another string a123456 aaaaaaaa
如果数字始终被空格包围,那么单词边界法可能更好。
public static String splitting(String str, int num){
String arr[] = str.split("[^0-9]");
for(String s:arr)
if(s.length() == num)
return s;
return null;
}
用...测试
public static void main(String[] args) {
String s = "Some text 987654321 and some more text 123456 and some other text again 654321 and more text in the end";
System.out.println(splitting(s, 6));
}
输出是
123456
在Javascript控制台中可以做到这一点。 注意\\\\d
:
replacedString = "rx14ax145N".replace(RegExp("x14(?!\\d)", "g"), "___");
r___ax145N
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.