Python正则表达式取代创建笑脸

时间:2011-07-18 18:54:15

标签: python regex

我想创建一个可以转换此文本的正则表达式字符串:

Hello this is a mighty fine day today

8===D 8==D 8D D 8====D 8==D 8=D 8===D

这可以用python re.sub oneliner吗?

5 个答案:

答案 0 :(得分:8)

不需要正则表达式:

s = 'Hello this is a mighty fine day today'
' '.join('%s%sD'%('8' if len(w) > 1 else '', '='*(len(w)-2)) for w in s.split())
# '8===D 8==D 8D D 8====D 8==D 8=D 8===D'

编辑:已调试;)感谢指针@tg

答案 1 :(得分:3)

问题是要求re.sub单行,所以这是一个完成工作的人:

In [1]: import re

In [2]: s = "Hello this is a mighty fine day today"
In [3]: print re.sub(r"\w+", lambda x:("8"+"="*1000)[:len(x.group())-1]+"D", s)
8===D 8==D 8D D 8====D 8==D 8=D 8===D

仅限教育用途! 8 = d

答案 2 :(得分:2)

这是一个re.sub oneliner按要求(为清晰起见分开):

import re 

print re.sub( r'\w(\w?)(\w*)', \
              lambda m: '8'*len(m.group(1)) + '='*len(m.group(2)) + 'D', \
              "Hello this is a mighty fine day today" )

答案 3 :(得分:0)

这是你的单行(对不起,没有正则表达式):

for word in sentence.split(' '): print '8' + '=' * (len(word) - 2) + 'D',

答案 4 :(得分:0)

我认为没有任何理由像以前的解决方案那样使用正则表达式。试试这个:

def pen(string):
    return ' '.join([("%s%s%s"%('8','='*(len(word)-2),'D'))[-len(word):] \
         for word in string.split()])

它似乎比我任意选择的正则表达式之一要快得多。