例子2
从非字母中间找到英文单词。给定的字符串例如.!?Hello
,Fisher:'
,it's
。
需要注意特殊的单词,例如第一1st
,第二2nd
,数字也是单词的一部分。
或者是带有单引号的单词,例如it's
。
\w
表示[0—9A—Za—z]
,即数字或者字母。
这里为了匹配到带引号的单词,使用的正则表达式是REG1 = "[^\\w]*([0-9a-zA-Z']+)[^\\w]*"
。
找到被其他字符包围的英文单词。这个表达式还是有瑕疵。
运行结果
! 不匹配 [^\w]*([0-9a-zA-Z']+)[^\w]*
!!! 不匹配 [^\w]*([0-9a-zA-Z']+)[^\w]*
输入: ?!Rust ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == ?!Rust
输入: ?!Rust ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == Rust
输入: Fisher:' ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == Fisher:'
输入: Fisher:' ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == Fisher
输入: ?!THANKS!? ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == ?!THANKS!?
输入: ?!THANKS!? ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == THANKS
输入: <<how>> ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == <<how>>
输入: <<how>> ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == how
输入: ?1st? ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == ?1st?
输入: ?1st? ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == 1st
输入: ?21st! ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == ?21st!
输入: ?21st! ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == 21st
输入: ?it's! ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(0) == ?it's!
输入: ?it's! ; 正则表达式: [^\w]*([0-9a-zA-Z']+)[^\w]* ; group(1) == it's
示例代码
public class ExtractEnWordBetweenMarks {
private static final String REG1 = "[^\\w]*([0-9a-zA-Z']+)[^\\w]*";
private static Pattern pattern = Pattern.compile(REG1);
public static void main(String[] args) {
System.out.println("从 [非字母 字母 非字母] 中提取出英文单词");
final String[] regs = {
REG1
};
final String[] textArr = {"!", "!!!", "?!Rust", "Fisher:'", "?!THANKS!?", "<<how>>", "?1st?", "?21st!", "?it's!"};
for (String r : regs) {
for (String s : textArr) {
extractTextFrom(r, s);
System.out.println();
}
}
}
private static void extractTextFrom(String reg, String txt) {
if (!txt.matches(reg)) {
System.out.println(txt + " 不匹配 " + reg);
return;
}
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(txt);
while (matcher.find()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println("输入: "+txt + " ; 正则表达式: " + reg + " ; group(" + i + ") == " + matcher.group(i));
}
}
}
}
修改正则表达式为[^\w]*([0-9a-zA-Z'"]+)[^\w]*
。除了支持单引号,也支持双引号"
。
需要支持的符号,可以按照上面的样子添加。
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~