RegEx缩短字符串

时间:2012-10-14 12:34:12

标签: regex

我需要一种方法来"缩写"一句话。我想从每个单词中取出至少3个字母,并在元音或该单词的结尾处完成缩写每个单词。

例如,如果我有一个字符串"利润损失报告",我想将其缩写为ProfLossRep

有人可以推荐一个能为我做这个的正则表达式吗?

感谢。

4 个答案:

答案 0 :(得分:0)

这是正则表达式:

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

第一个捕获组返回前三个字母,下一个返回最接近的元音或最后一个字母。

Here它正在发挥作用。

答案 1 :(得分:0)

我不确定只用正则表达式替换就可以做到这一点。你绝对可以做的是编写一个可以做到这一点的小程序。这是Ruby中的一个简单的单行程序:

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

输出:

"ProfLossRep"

答案 2 :(得分: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);

答案 3 :(得分:0)

这个正则表达似乎可以解决问题:

\ B \瓦特{3} [^ aAeEyYuUiIoO \ W $] *