2012-10-14 69 views
-1

我需要一种“缩写”句子的方法。我想从每个单词中取出至少3个字母,并且在元音或该单词的末尾缩写每个单词。RegEx缩短字符串

举例来说,如果我有一个字符串“损益表报告”,我想它简称为ProfLossRep

有人可以推荐一个正则表达式会为我做到这一点?

谢谢。

+0

为什么这个问题得到了降低?这似乎是一个合理的问题。 –

+0

哪种语言?这对于正则表达式问题总是相关的。 –

回答

0

此正则表达式似乎做的伎俩:

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

0

这里是正则表达式:

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

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

Here它在行动中。

0

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

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

输出:

"ProfLossRep" 
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);