PM 17 这是我的字符串模式检查: 1-6ren">
gpt4 book ai didi

java 字符串正则表达式模式匹配和替换字符串

转载 作者:行者123 更新时间:2023-11-30 05:27:15 29 4
gpt4 key购买 nike

有一个字符串,如果该模式匹配只需要返回前几个字符。

String str = "PM 17/PM 19 - Test String"; 

期望返回字符串 --> PM 17

这是我的字符串模式检查:

1) 始终以PM
开头2)然后是空格(或有时为零空格)
3) 然后跟一些数字
4)然后是斜杠(即/)
5) 然后是相同的字符串PM
6)然后是空格(或有时零空格)
7) 然后是数字
8) 然后是任何其他字符/字符串。

如果给定的字符串与上面的模式匹配,我需要获取斜杠之前的字符串(即PM 17)

我尝试了以下方法,但它不适用于该情况。

  if(str.matches("PM\\s+[0-9.]/PM(.*)")) { //"PM//s+[0-9]/PM(.*)"
str = str.substring(0, str.indexOf("/"));
flag = true;
}

最佳答案

您可以在此处使用 .replaceFirst 和捕获组来代替 .matches:

str = str.replaceFirst( "^(PM\\s*\\d+)/PM\\s*\\d+.*$", "$1" );
//=> PM 17

RegEx Demo

正则表达式详细信息:

  • ^:行开始
  • (PM\\s*\\d+):匹配并分组以 PM 开头、后跟 0 个或多个空格、后跟 1 个或多个数字的文本
  • /PM\\s*\\d+:匹配 /PM 后跟 0 个或多个空格,后跟 1 个或多个数字
  • .*$:匹配行结束之前的任意字符
  • $1:是替换,将捕获的第一组字符串放回到替换中。
<小时/>

如果您想在子字符串提取之前进行输入验证,那么我建议使用以下代码:

final String regex = "(PM\\s*\\d+)/PM\\s*\\d+.*";    
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(str);

if (matcher.matches()) {
flag = true;
str = matcher.group(1);
}

关于java 字符串正则表达式模式匹配和替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58289329/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com