关于标点符号的正则表达式

时间:2012-07-28 22:19:46

标签: java regex string

所以我对正则表达式完全不熟悉,我正在尝试使用Java的java.util.regex来查找输入字符串中的标点符号。我不知道我可以提前得到什么样的标点符号,除了(1)!,?,。,...都是有效的puncutation,以及(2)“<”和“>”意思是特别的东西,不要算作标点符号。 程序本身伪随机地构建短语,我想在句子结束之前去除句点之前的句点。

我可以将整个单词与任何标点符号匹配,但匹配器只是为我提供了该单词的索引。换句话说:

Pattern p = Pattern.compile("(.*\\!)*?");
Matcher m = p.matcher([some input string]);

会抓住最后带"!"的任何字词。例如:

String inputString = "It is a warm Summer day!";
Pattern p = Pattern.compile("(.*\\!)*?");
Matcher m = p.matcher(inputString);
String match = inputString.substring(m.start(), m.end());

结果 - >字符串匹配〜“天!”

但我希望将Matcher索引为"!",因此我可以将其拆分。

我可以制作案例,并使用String.substring(...)来获取我可能得到的每种标点符号,但我希望我使用正则表达式时会出现一些错误。

3 个答案:

答案 0 :(得分:28)

Java确实以环形方式支持POSIX字符类。对于标点符号, [:punct:] 的Java等效项是 \ p {Punct}

有关详细信息,请参阅以下link

这是一个使用注释

中的表达式的具体工作示例
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexFindPunctuation {

    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\p{Punct}");

        Matcher m = p.matcher("One day! when I was walking. I found your pants? just kidding...");
        int count = 0;
        while (m.find()) {
            count++;
            System.out.println("\nMatch number: " + count);
            System.out.println("start() : " + m.start());
            System.out.println("end()   : " + m.end());
            System.out.println("group() : " + m.group());
        }
    }
}

答案 1 :(得分:8)

我会尝试类似于

的字符类正则表达式
"[.!?\\-]"

[]内添加您想要匹配的任何字符。小心转义任何可能对正则表达式解析器有特殊含义的字符。

然后,您必须使用Matcher.find()迭代匹配,直到它返回false。

答案 2 :(得分:-1)

我会尝试

apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: uwgazon-web-ingress annotations: cert-manager.io/issuer: "uwgazon-tls-issuer" spec: tls: - hosts: - uwgazon.sdsoftware.be secretName: uwgazon-sdsoftware-be-tls rules: - host: uwgazon.sdsoftware.be http: paths: - backend: serviceName: uwgazon-web servicePort: 80

它匹配任何非单词字符。这包括空格和标点符号,但不包括下划线。等效于[^ A-Za-z0-9 _]