代码之家  ›  专栏  ›  技术社区  ›  rsc05

使用正则表达式在字符串中排列未格式化的段落

  •  0
  • rsc05  · 技术社区  · 6 年前

    我有一篇没有安排好的文章,比如说

    randstr='''
    Hello Abou al Reeem
    HAbibi abou lbeess
    dkhlak 3amak l khil wen
    Li aslan 7adan be3rif shi 3an l bazz ? 
    Sara7a wala 7adan by3rif 3an l ken3an
    
    Grave is 22 and Tony is 15
    Rami is 44 and Aya is 40
    '''
    

    如你所见,第一段由以下句子组成: \n 不同的线条。我想要的是用python编写代码,这样我就可以得到这个

    list='''
     Hello Abou al Reeem HAbibi abou lbeess dkhlak 3amak l khil wen Li aslan 7adan be3rif shi 3an l bazz ?  Sara7a wala 7adan by3rif 3an l ken3an
    
     Grave is 22 and Tony is 15 Rami is 44 and Aya is 40
    '''
    

    我在python代码方面取得了一定的成功

    import re
    randstr='''
    Hello Abou al Reeem
    HAbibi abou lbeess
    dkhlak 3amak l khil wen
    Li aslan 7adan be3rif shi 3an l bazz ? 
    Sara7a wala 7adan by3rif 3an l ken3an
    
    Grave is 22 and Tony is 15
    Rami is 44 and Aya is 40
    '''
    
    # Split the string based on empty lines (Note: I tried ^\s*$ but it did not work)
    A=randstr.split('\n\n')
    
    # Split each of the elements in A to one sentence without the \n using regular expression substitution
    regex=re.compile('\n')
    
    for i in range(len(A)):
        A[i]=regex.sub(' ',A[i])
    
    A
    

    但我想知道这是否更容易,是否可以在Sublime文本3中而不是在python中这样做?

    注意:我不熟悉正则表达式

    2 回复  |  直到 6 年前
        1
  •  2
  •   cs95 abhishek58g    6 年前

    这里根本不需要正则表达式。在两条换行线上拆分,然后依次拆分并连接每个段落:

    print(
        '\n'.join(
            [' '.join(para.splitlines()) for para in randstr.split('\n\n')]
        )
    )
    
        2
  •  1
  •   Patrick Artner    6 年前

    也可以用regex替换:

    import re
    
    randstr='''
    Hello Abou al Reeem
    HAbibi abou lbeess
    dkhlak 3amak l khil wen
    Li aslan 7adan be3rif shi 3an l bazz ? 
    Sara7a wala 7adan by3rif 3an l ken3an
    
    Grave is 22 and Tony is 15
    Rami is 44 and Aya is 40
    '''
    
    newstr = re.sub("\n","\n\n", re.sub(r'\n(?! *\n)','',randstr)) 
    
    print (newstr)
    

    输出:

    Hello Abou al ReeemHAbibi abou lbeessdkhlak 3amak l khil wenLi aslan 7adan be3rif shi 3an l bazz ? Sara7a wala 7adan by3rif 3an l ken3an
    
    Grave is 22 and Tony is 15Rami is 44 and Aya is 40
    

    它本质上与COLDSPEEDs解决方案相同,首先

    • '\n' 不后跟可选空格和 “\n” 什么都没有
    • 然后替换所有剩余的 “\n” 具有 '\n\n'

      r“\n(?!*\n)”#(?!…)是一种消极的前瞻性,是事后无法比拟的