正则表达式用第二个字母替换每个单词的第一个字母

时间:2018-03-10 05:04:25

标签: regex

我的标记系统现在如下:

 - @issue
 - @topic
 - @subject
 - #person
 - #otherperson
 - $company
 - $othercompany

Mac上的其中一个应用程序(DEVONthink)专门处理@,因此我想将标记系统更改为:

 - iissue
 - ttopic
 - ssubject
 - pperson
 - ootherperson
 - ccompany
 - oothercompany

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我只想在这里使用群组。记住group(0)总是整个匹配的String,所以我们使用group(2)和group(3)作为第二个字母,然后是其余的单词:

public static void main(String[] args) {
    String[] words = {"@issue"
                      ,"@topic"
                      ,"@subject"
                      ,"#person"
                      ,"#otherperson"
                      ,"$company"
                      ,"$othercompany"};

    String regex = "(.{1,1})(.{1,1})(.*)\\s*?";
    Matcher m = Pattern.compile(regex).matcher("");
    for (String word : words) {
        m.reset(word).find();
        String s = m.group(2) + m.group(2) + m.group(3);
        System.out.println(s);
    }
}

如果您知道自己的字词是由字母数字字符组成的,则可以将(.*?)更改为更具体的字符组。例如(\\w*?)或类似的东西。

如果修剪了所有单词,则结尾\\s*?也可以省略。例如,这里的效果也很好:(.{1,1})(.{1,1})(\\w*)

此外,如果您知道标签以@,#或$开头的事实,这也可以起作用:([@#$])(.{1,1})(\\w*)

您也可以将find()替换为matches()