我有一个输入:'BOOM', 'GRE,M', 'H SE', 1,2
现在,我想在条件上拆分字符串:
'BOOM'==> BOOM
,'GRE,M' ==> GRE,M
,'H SE'==> H SE
(应保留空格)。因此,如示例所示,如果单词在“'H SE'
”示例中有空格,则只应删除单引号并保留空格。1 ==>1
,2==>2
我有一个正则表达式'(.*)'
,但这只会在单引号内处理单词。所以,使用正则表达式,我可以很容易地得到以下内容:
BOOM
,GRE,M
,H SE
但不是1
和2
。什么正则表达式将获得所有的价值?
答案 0 :(得分:3)
试试这个:
\'(.+?)\'|([^\s,]+)
表示:
\'(.+?)\'
- 任意字符(.
)一次或多次(+?
)
在单引号中唱歌('
); +?
是lazy quantifier,它会匹配尽可能少的字符以提供有效匹配,|
- 或者,替代([^\s,]+)
- 一个或多个任何字符,但不是空格或逗号,+
(我在第一个版本中忘了它!)非常重要,没有它会匹配单个字符< / LI>
在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,“