文を「短縮」する方法が必要です。各単語から少なくとも 3 文字を取り出し、母音またはその単語の末尾で各単語を省略したいと思います。
たとえば、「Profit Loss Report」という文字列がある場合、ProfitLossRep に省略したいと思います。
誰かが私のためにこれを行う正規表現を推奨できますか?
ありがとう。
文を「短縮」する方法が必要です。各単語から少なくとも 3 文字を取り出し、母音またはその単語の末尾で各単語を省略したいと思います。
たとえば、「Profit Loss Report」という文字列がある場合、ProfitLossRep に省略したいと思います。
誰かが私のためにこれを行う正規表現を推奨できますか?
ありがとう。
正規表現は次のとおりです。
/^([a-z]{3}).*?([aeiou]|(?:.$))/i
最初のキャプチャ グループは最初の 3 文字を返し、次は最も近い母音または最後の文字を返します。
ここでそれが実行されます。
正規表現の置換だけでそれができるかどうかはわかりません。あなたが間違いなくできることは、それを行う小さなプログラムを書くことです。Ruby での簡単なワンライナーを次に示します。
p 'Profit Loss Report'.split.map { |i| i[0, 4].gsub /[aeio]*$/, '' }.join
出力:
"ProfLossRep"
.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);
この正規表現はトリックを行うようです:
\b\w{3}[^aAeEyYuUiIoO\W$]*