-1

文を「短縮」する方法が必要です。各単語から少なくとも 3 文字を取り出し、母音またはその単語の末尾で各単語を省略したいと思います。

たとえば、「Profit Loss Report」という文字列がある場合、ProfitLossRep に省略したいと思います。

誰かが私のためにこれを行う正規表現を推奨できますか?

ありがとう。

4

4 に答える 4

0

正規表現は次のとおりです。

/^([a-z]{3}).*?([aeiou]|(?:.$))/i

最初のキャプチャ グループは最初の 3 文字を返し、次は最も近い母音または最後の文字を返します。

ここでそれが実行されます。

于 2012-10-14T12:43:44.983 に答える
0

正規表現の置換だけでそれができるかどうかはわかりません。あなたが間違いなくできることは、それを行う小さなプログラムを書くことです。Ruby での簡単なワンライナーを次に示します。

p 'Profit Loss Report'.split.map { |i| i[0, 4].gsub /[aeio]*$/, '' }.join

出力:

"ProfLossRep"
于 2012-10-14T12:44:02.880 に答える
0

.NET のソリューションは次のとおりです。

resultString = Regex.Replace(subjectString, 
    @"(?<=          # Start at a position after...
     \b             # the start of a word 
     \p{L}{2,}      # followed by at least two letters (any letters)
     [^\P{L}aeiou]  # and one letter that isn't a vowel
    )               # End of lookbehind
    (?:             # Then match...
     [aeiou]        #  a vowel
     \p{L}*         #  plus any additional letters
    )?              # if present.
    \s*             # Match any trailing whitespace", 
    "", RegexOptions.IgnorePatternWhitespace);
于 2012-10-14T13:21:47.887 に答える
0

この正規表現はトリックを行うようです:

\b\w{3}[^aAeEyYuUiIoO\W$]*

于 2012-10-14T13:21:49.963 に答える