1

スペルチェックを実行するために、キャメルケースの名前を正規表現を使用して個々の名前に分割したいと考えています。

分割は次のようになります。

1) extendedStructureForNUB --> 拡張、構造、For、NUB

2) extendedStructureFor2004 --> 拡張、構造、For、2004

以下の質問の回答を使用して、最初の条件に分割できます。

質問: camelCase または TitleCase を分割する RegEx (高度)

ただし、数値を含む文字列 (2 番目の条件) の場合、形式どおりに返されません。

extendedStrctureFor2004 --> extended, Structure, For2004

この正規表現を再利用して数字を分割する方法も提案してください。

4

4 に答える 4

4
public static void main(String[] args) 
{     
    for (String w : "camelValue".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) {
         System.out.println(w);
    } 
}

編集:UPPER2000UPPERの大文字と小文字を修正すると、正規表現は次のようになります。

public static void main(String[] args) 
{     
    for (String w : "camelValue".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!(^|[^A-Z]))(?=[0-9])|(?<!(^|[^0-9]))(?=[A-Za-z])|(?<!^)(?=[A-Z][a-z])")) {
         System.out.println(w);
    } 
}
于 2012-05-31T08:53:41.403 に答える
1

私が見ているのは、あなたの前の質問からの答えはほとんど完璧でした。私があなたに気づいたら、私は別の分割操作を追加するでしょうが、今回は各単語の真ん中の最初の数字の前に。

次に例を示します。

String data="2Hello2000WORLDHello2000WORLD";
//your previois split
String[] myFirstSplit=data.split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])");

//I will store split results in list (I don't know size of array)
List<String> list=new ArrayList<>();
for (String s:myFirstSplit){
    //if splited word contains digit after letter then split
    for (String tmp:s.split("(?<=[a-zA-Z])(?=[0-9])"))
        list.add(tmp);
}
System.out.println(list);
//out [2, Hello, 2000, WORLD, Hello, 2000, WORLD]
于 2012-05-31T09:31:26.527 に答える
1
public static void main(String[] args)
{
    for (String w : "extended2004FeeStructure".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) {
        System.out.println(w);
    }
}

修正した

于 2012-05-31T08:49:08.177 に答える
0

これを分離した後

extendedStrctureFor2004->拡張、構造、For2004

「arr」のような配列に格納します

この正規表現を使用する

var numberPattern = / [0-9] + / g; var numMatch = arr [i] .match(numberPattern);

これで、numMatchには必要な数字が含まれます。

于 2012-05-31T08:53:13.327 に答える