复杂的正则表达式,用于捕获包含逗号和空格的数字和单词

时间:2015-08-04 14:27:02

标签: java regex string

我有一个输入:'BOOM', 'GRE,M', 'H SE', 1,2

现在,我想在条件上拆分字符串:

  1. 如果字符串中的单词被单引号括起,请删除单引号,例如'BOOM'==> BOOM'GRE,M' ==> GRE,M'H SE'==> H SE(应保留空格)。因此,如示例所示,如果单词在“'H SE'”示例中有空格,则只应删除单引号并保留空格。
  2. 如果它是一个没有单引号的单词,那么就什么也不做  1 ==>12==>2
  3. 我有一个正则表达式'(.*)',但这只会在单引号内处理单词。所以,使用正则表达式,我可以很容易地得到以下内容: BOOMGRE,MH SE但不是12。什么正则表达式将获得所有的价值?

3 个答案:

答案 0 :(得分:3)

试试这个:

\'(.+?)\'|([^\s,]+)

表示:

  • \'(.+?)\' - 任意字符(.)一次或多次(+?) 在单引号中唱歌('); +?lazy quantifier,它会匹配尽可能少的字符以提供有效匹配,
  • | - 或者,替代
  • ([^\s,]+) - 一个或多个任何字符,但不是空格或逗号,+(我在第一个版本中忘了它!)非常重要,没有它会匹配单个字符< / LI>

DEMO

在Java中提取组的示例:

public class Main {
    public static void main(String[] args){
        String example = "'BOOM', 'GRE,M', 'H SE', 1,2";
        Pattern regex = Pattern.compile("\'(.+?)\'|([^\\s,]+)");
        Matcher matcher = regex.matcher(example);
        while (matcher.find()) {
            if (matcher.group(1) != null){
                System.out.println(matcher.group(1));
            }else if(matcher.group(2)!=null){
                System.out.println(matcher.group(2));
            }
        }
    }
}

答案 1 :(得分:2)

我用更好理解的词语写下我的评论:

如果使用字符串的replace-function:

String ss = "'BOOM', 'GRE,M', 'H SE', 1,2";
System.out.println(ss.replace("'", ""));

你会得到这个输出:

BOOM, GRE,M, H SE, 1,2

或者我误解了这个问题?

答案 2 :(得分:0)

在浏览器控制台中尝试此操作

<'>''BOOM','GRE,M','H SE',1,2“.replace(/((?:')([^ \'] +)(?:')|([0 -9] +))(?:,*)?/ g,“$ 1 ==&gt; $ 2 $ 3,”)

你应该得到''BOOM'==&gt; BOOM,'GRE,M'==&gt; GRE,M,'H SE'==&gt; H SE,1 ==&gt; 1,2 == &gt; 2,“