我有一个以单词开头的字符串,我想创建一个从索引0开始并在下一个特殊字符的索引处结束的子字符串(space
,.
,{{1 },!
等...)。我如何用正则表达式做到这一点?我能获得第一个正则表达式匹配的索引吗?模式看起来怎么样?
提前致谢!
答案 0 :(得分:1)
我如何使用正则表达式进行此操作?
您可以尝试这样的事情:
^.*?\p{Punct}
^
匹配字符串.*?
匹配任何reluctantly \p{Punct}
匹配!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
我可以获得第一个正则表达式匹配的索引吗?
通常,您可以使用Matcher#start
获取正则表达式匹配的索引。
答案 1 :(得分:1)
以下打印字符串中包含单词部分的子字符串(\w
表示包含数字的单词字符,而\W
表示非单词字符):
Pattern p = Pattern.compile("(\\w+)[\\W\\s]*");
Matcher matcher = p.matcher("word!,(. [&]");
if(matcher.find()) {
System.out.println(matcher.group(1));
}
输出:word
答案 2 :(得分:1)
您可以使用以下内容。
^\w+(?=\W)
<强>解释强>:
^ # the beginning of the string
\w+ # word characters (a-z, A-Z, 0-9, _) (1 or more times)
(?= # look ahead to see if there is:
\W # non-word characters (all but a-z, A-Z, 0-9, _)
) # end of look-ahead
示例强>:
String s = "foobar!";
Pattern p = Pattern.compile("^\\w+(?=\\W)");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println("Start:" + m.start() + " End:" + m.end());
System.out.println(m.group());
}