单引号之间的Java正则表达式内容
我正在尝试用Java编写一个正则表达式来查找单引号之间的内容。 能帮我一个忙吗? 我尝试了以下但在某些情况下它不起作用:
Pattern p = Pattern.compile("'([^']*)'");
-
测试案例: ‘Tumblr’是一个了不起的应用预期输出: Tumblr
-
测试案例: Tumblr是一个惊人的“应用程序” 预期输出:应用程序
-
测试案例: Tumblr是一个“惊人的”应用程序预期输出:惊人的
-
测试案例: Tumblr’很棒’和’惊人’ 预期输出:真棒,令人惊叹
-
测试案例: Tumblr的用户感到失望预期输出:无
-
测试案例: Tumblr的“收购”完成但用户的忠诚度令人怀疑预期产出:收购
我很感激任何帮助。
谢谢。
这应该是诀窍:
(?:^|\s)'([^']*?)'(?:$|\s)
示例: http : //www.regex101.com/r/hG5eE1
在Java(ideone)中 :
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"); } } } }
如果你不允许单引号字符'
,或空格字符' '
在模式中,那么你就可以了。 我使用了+
因为我假设你不想要一个空条目(如果没有,把它改回一个*
):
Pattern p = Pattern.compile("'([^' ]+)'");
尝试下一个:
'\w+'|'\w+(\s\w+)*'
试试这个简单的正则表达式模式:
'([^\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 }
只是不要让' '
出现在输出中。 使用这个正则表达式:
'([^'] *)'
或者确保引号对用空格包装。
(?:^ |)'([^'] *)'(?:| $)