我有一个字符串"'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");
答案 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)
来删除第一个单词周围的潜在单引号StringTokenizer
,while
块内只有2行就足够了。正则表达式意味着:
^
- 开始在字符串的最开头查找匹配项'?
- 匹配0或1单引号(\\w+)
- 匹配并捕获1个或多个字母数字符号(我们在替换模式中将它们称为$1
)'?
- 匹配0或1单引号(?=\\S)
- 仅在可选单引号后没有空格时匹配。也许,你甚至可以用,
代替这个前瞻,如果你总是在第一个单词之后有它。