不应考虑字符串末尾的空格或两个数字之间的空格,但它可以在数字之前或之后,但不能在数字之间. 我编写了一个正则表达式,但根据我的要求,它并不适用于所有条件.

Pattern pattern =Pattern.compile("\\s(?![\\d\\s]*\\d$)");
Matcher matcher=pattern.matcher(input);
int lastIndex=-1;
while(matcher.find()){
lastIndex=matcher.start());
}

我如何使用正则表达式和任何其他方式来实现我的要求,以便在没有While循环的情况下获得最后一个匹配项? 示例

jumnsch@domain.com m 5180-3807-3679-8221 612 3/1/2010
                    ^
hello this card number 4444 5555 6666 7777
                      ^
hello this bob
          ^

推荐答案

如果只想要最后一个匹配项,可以使用.*,让点匹配一个换行符,在所有行中查找最后一个匹配项.请注意,\s也匹配换行符.

(?s)^.*(\s(?<!\d.)(?=\d)|\s(?<=\d.)(?!\d|\s*$)|\s(?<=[^\d\s].)(?=[^\d\s]))

Java demo.com/r/VwiosT/1" rel="nofollow noreferrer">Regex demo|Java demo

然后,您可以使用matcher.find()并使用matcher.start(1)从组1中获取索引

String regex = "(?s)^.*(\\s(?<!\\d.)(?=\\d)|\\s(?<=\\d.)(?!\\d|\\s*$)|\\s(?<=[^\\d\\s].)(?=[^\\d\\s]))";
String string = "jumnsch@domain.com m 5180-3807-3679-8221 612 3/1/2010\n\n"
        + "hello this card number 4444 5555 6666 7777\n\n"
        + "hello this bob";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println("[" + matcher.group(1) + "]");
    System.out.println(matcher.start(1));
}

输出

[ ]
109

如果只有单行,则可以使用\h匹配水平空格字符.

^.*(\h(?<!\d.)(?=\d)|\h(?<=\d.)(?!\d|\h*$)|\h(?<=[^\d\h].)(?=[^\d\h]))

Regex demo

Java相关问答推荐

Collections.binarySearch()使用Collections.reverseOrder()作为比较器返回-1

更新我们的一个文物后出现了严重的符号引用错误

Android视图覆盖不阻止点击它后面的控件

ittext pdf延迟签名,签名无效

RxJava PublishSubject缓冲区元素超时

使用JdkClientHttpRequestFactory通过Spring RestClient和Wiemock读取时达到EOF

如何确定springboot在将json字段转换为Dto时如何处理它?

Com.google.firebase.database.DatabaseException:无法将类型为java.lang.Boolean的值转换为字符串.这是关于什么的?

Jolt变换JSON数组问题

使用存储在字符串变量中的路径目录打开.pdf文件

如何仅使用键/ID的一部分(组合)高效地返回映射值?

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

从Spring6中的JPMS模块读取类时出现问题

将stringBuilder + forloop转换为stream + map

Java CDI:@Singleton@Startup@Inject无法实现接口

如何在Spring Boot Auth服务器上正确配置CORS?

由于可为null,无法在kotlin中实现java接口

无泄漏函数的Java DRY

当我将鼠标悬停在javafxTextArea上时,如何更改鼠标光标?

转换为JSON字符串时,日期按天递减-Java