0

私は正規表現が初めてです。

3 桁の数字で始まり、大文字の単語の先頭にスペースを配置する長い単語列を検索する式は次のとおりです。

交換:

013TheBlueCowJumpedOverTheFence1984.jpg

と:

013 The Blue Cow Jumped Over The Fence 1984

注: 末尾の .jpg を削除します

これにより、時間を大幅に節約できます。

4

4 に答える 4

1

このタスクには正規表現を使用しません。それは醜く、維持するのが難しいでしょう。より良いアプローチは、文字列をループして、入力に基づいて文字列を再構築することです。

string retVal = "";
foreach(char s in myInput){
    if(IsCapitol(s)){
        reVal += " " + s;
    }
    //insert the rest of your conditions
}
于 2012-12-03T15:56:42.017 に答える
0

この正規表現を使用してみてください\d+|[A-Z][a-z]*

すべての一致を収集し、それらをスペースで結合する必要があります

于 2012-12-03T15:53:01.730 に答える
0

マッチ:

'[A-Z][a-z]*'

と置換する

' \0'

これは 1984 の前にスペースを入れず、.jpg を削除しないことに注意してください。でマッチングすることで前者を行うことができます

'[0-9]+|[A-Z][a-z]*'

代わりは。後者は、別の命令でそれを削除します。たとえば、正規表現で ' \.jpg$' を '' に置き換えます。

は、多くの言語\と同様に記述する必要があることに注意してください。\\

于 2012-12-03T15:56:02.723 に答える
0

交換はそれぞれ異なるため、これには 2 つの操作が必要になります。

最初:

/(((?<![\d])\d)|((?<![A-Z])[A-Z](?![A-Z])))/

置き換え: ' $1'(スペースに注意してください)

単語の間にスペースを入れます。二番目:

/\s*(.*)\s*\..*$/

と置換する:'$1'

末尾のスペースと拡張子を削除します。

最初の式は複数の部分に分けることができます:(?<![\d])\d別の数字が先行していない数字を検索し、2 番目の式:((?<![A-Z])[A-Z](?![A-Z]))大文字が先行または後続していない大文字を検索します。

文字列をどのように扱っているかなど、これに組み込みたいルールがさらにある可能性があります'BackInTheUSSR.jpg'

編集:これはその例を処理する必要があります:

/(((?<![\d])\d)|((?<![A-Z])[A-Z](?![A-Z]))|((?<![A-Z])[A-Z]+(?![a-z])))/
于 2012-12-03T15:57:59.677 に答える