我正在尝试用Java编写一个正则表达式来查找单引号之间的内容。可以请一位帮助我吗?我试过以下但在某些情况下它不起作用:
Pattern p = Pattern.compile("'([^']*)'");
测试用例:'Tumblr'是一个了不起的应用预期输出: Tumblr
测试案例:Tumblr是一个了不起的'应用'预期输出应用
测试案例:Tumblr是一个“惊人的”应用预期输出惊人
测试案例:Tumblr'非常棒'和'惊人'预期输出:非常棒,令人惊叹
测试案例:Tumblr的用户感到失望预期输出
测试案例:Tumblr的“收购”已完成,但用户的忠诚度令人怀疑预期产出收购
我很感激任何帮助。
感谢。
答案 0 :(得分:14)
这应该可以解决问题:
(?:^|\s)'([^']*?)'(?:$|\s)
示例:http://www.regex101.com/r/hG5eE1
import java.util.*;
import java.lang.*;
import java.util.regex.*;
class Main {
static final String[] testcases = new String[] {
"'Tumblr' is an amazing app",
"Tumblr is an amazing 'app'",
"Tumblr is an 'amazing' app",
"Tumblr is 'awesome' and 'amazing' ",
"Tumblr's users' are disappointed ",
"Tumblr's 'acquisition' complete but users' loyalty doubtful"
};
public static void main (String[] args) throws java.lang.Exception {
Pattern p = Pattern.compile("(?:^|\\s)'([^']*?)'(?:$|\\s)", Pattern.MULTILINE);
for (String arg : testcases) {
System.out.print("Input: "+arg+" -> Matches: ");
Matcher m = p.matcher(arg);
if (m.find()) {
System.out.print(m.group());
while (m.find()) System.out.print(", "+m.group());
System.out.println();
} else {
System.out.println("NONE");
}
}
}
}
答案 1 :(得分:6)
如果您不允许单引号字符'
或空格字符' '
处于模式中,那么您就可以了。我使用+
,因为我假设您不想要空条目(如果没有,请将其更改回*
):
Pattern p = Pattern.compile("'([^' ]+)'");
答案 2 :(得分:2)
尝试下一个:
'\w+'|'\w+(\s\w+)*'
答案 3 :(得分:0)
试试这个简单的正则表达式模式:
'([^\s']+)'
和测试代码:
try {
Pattern regex = Pattern.compile("'([^\\s']+)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
for (int i = 1; i <= regexMatcher.groupCount(); i++) {
// matched text: regexMatcher.group(i)
// match start: regexMatcher.start(i)
// match end: regexMatcher.end(i)
}
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
答案 4 :(得分:0)
不要让' '
出现在输出中。使用此正则表达式:
'([^' ]*)'
或确保引号对用空格包装。
(?:^| )'([^']*)'(?: |$)