所以我对正则表达式完全不熟悉,我正在尝试使用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(...)
来获取我可能得到的每种标点符号,但我希望我使用正则表达式时会出现一些错误。
答案 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 _]