使用Java正则表达式进行单词提取和拆分

时间:2015-07-29 20:52:58

标签: java regex

我有一个字符串"'GLO', FLO"现在,我想要一个regex表达式来检查字符串中的每个单词,如果: -word以单引号开头和结尾,用空格替换单引号 - 如果在使用空格分割两个单词的单词之间插入逗号。

所以,最后,我应该得到GLO FLO

有关如何使用字符串上的replaceAll()方法执行此操作的任何帮助吗?

这个正则表达式并没有为我做到:"'([^' ]+)|\\s+'"

public static void displaySplitString(final String str) {
   String pattern1 = "^'?(\\w+)'?,\\s+(\\w+)$";
   StringTokenizer strTok = new StringTokenizer(str, " , ");
   while (strTok.hasMoreTokens()) {
     String delim = (strTok.nextToken());
     delim.replaceAll(pattern1, "$1$2");
     System.out.println(delim);
   }
 } //in main method displaySplitString("'GLO', FLO");

1 个答案:

答案 0 :(得分:3)

以下the snippet可以帮助您:

public static void displaySplitString(String str)
    {
        String pattern1 = "^'?(\\w+)'?(?=\\S)";
        str = str.replaceAll(pattern1, " $1 ");
        StringTokenizer strTok = new StringTokenizer(str, " , "); 
        while (strTok.hasMoreTokens()) 
        {
            String delim = (strTok.nextToken()); 
            System.out.println(delim); 
        }
    }

下面,

  • 我将str参数声明更改为final(以便我们可以更改方法内的str值)
  • 我正在使用第一个正则表达式^'?(\\w+)'?(?=\\S)来删除第一个单词周围的潜在单引号
  • 由于您使用StringTokenizerwhile块内只有2行就足够了。

正则表达式意味着:

  • ^ - 开始在字符串的最开头查找匹配项
  • '? - 匹配0或1单引号
  • (\\w+) - 匹配并捕获1个或多个字母数字符号(我们在替换模式中将它们称为$1
  • '? - 匹配0或1单引号
  • (?=\\S) - 仅在可选单引号后没有空格时匹配。也许,你甚至可以用,代替这个前瞻,如果你总是在第一个单词之后有它。