15

我正在尝试用 Java 编写一个正则表达式来查找单引号之间的内容。有人可以帮我解决这个问题吗?我尝试了以下方法,但在某些情况下不起作用:

Pattern p = Pattern.compile("'([^']*)'");
  1. 测试用例: “Tumblr”是一个了不起的应用程序预期输出: Tumblr

  2. 测试用例: Tumblr 是一个了不起的“应用程序”预期输出: 应用程序

  3. 测试用例: Tumblr 是一个“惊人”的应用程序预期输出: 惊人

  4. 测试用例: Tumblr 是“真棒”和“惊人”预期输出: 真棒,惊人

  5. 测试用例: Tumblr 的用户感到失望预期输出:

  6. 测试用例: Tumblr 的“收购”完成,但用户的忠诚度值得怀疑预期输出: 收购

我很感激这方面的任何帮助。

谢谢。

4

5 回答 5

16

这应该可以解决问题:

(?:^|\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");
            }
        } 
    }
}
于 2013-05-25T04:35:52.837 回答
7

如果您不允许单引号字符 ,'或空格字符 , ' '出现在模式中,那么您就可以开始了。我使用+是因为我假设您不想要一个空条目(如果没有,请将其改回*):

Pattern p = Pattern.compile("'([^' ]+)'");
于 2013-05-25T04:42:45.393 回答
2

尝试下一个:

'\w+'|'\w+(\s\w+)*'

https://github.com/paul-vargas/java-regex-ui

于 2013-05-25T05:09:42.230 回答
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
}
于 2013-05-25T04:36:46.057 回答
0

只是不要让' '出现在输出中。使用这个正则表达式:

'([^' ]*)'

或者确保引号对用空格包裹。

(?:^| )'([^']*)'(?: |$)
于 2013-05-25T04:40:02.917 回答