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

标签 java regex string

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

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/

相关文章:

javascript - 如何使用 javascript 从域中删除子域

java - 在Java中将算术字符串转换为double

java.util.Scanner 第二个实例抛出 NoSuchElementException

java - 处理 Javers 审计中的架构更改

regex - 如何在同一等式中搜索/替换所有 "n("-> "n*("和 ")n"-> ")*n"?

javascript - 当值可选时,如何在 Javascript/jQuery 中将 url 拆分为键值对

linux - 如何连接字符串并在 linux bash 脚本中显示格式化的字符串?

python,从列表中删除字符串中的单词

java - 内存不足错误 : Java heap space

java - 在Android模拟器上加载swf文件