正则表达式匹配字符串中的固定子字符串

时间:2018-08-16 03:48:29

标签: java regex

我正在尝试编写正则表达式以验证字符串中固定位置是否存在特定数字。

String: 109300300330066611111111100000000017000656052086116020170111Name 1
Number to find:  111111111 (Staring from position 17)

我写了以下正则表达式:

^.{16}(?<Ones>111111111)(.*)

我的理解是:

  1. 让前16个字符不变
  2. 使用Named Capturing Group来抓取特定单词
  3. 让其余字符保持原状

我是regex的新手,以上方法是否有问题? 能以其他/更好的方式完成吗?

我正在使用Java 8。

2 个答案:

答案 0 :(得分:2)

如果没有关于您为什么做自己的工作的更多详细信息,我只能看到一种可能的改进。您在字符串的开头重复了任意字符16次,而不是写出16个testing 123 ,这很好而且可读,但是,对于重复的.执行相同的操作就很好了:

1

否则,^.{16}(?<Ones>1{9})(.*) 的字符串很难在没有编码人员手动计算正则表达式中有多少的情况下得以理解。

答案 1 :(得分:2)

如果您想对它们进行硬编码并且知道起始位置,并且只是想知道它是否在那里,则使用正则表达式似乎是不必要的。您可以使用此:

String s = "109300300330066611111111100000000017000656052086116020170111Name 1";
if (s.indexOf("111111111").equals(16) doSomething();

没有正则表达式的另一种可能的解决方案:

if(s.substring(16,25).equals("111111111") doSomething();

否则您的正则表达式看起来不错。