在Python中使用正则表达式替换换行符...

时间:2017-07-02 16:26:05

标签: python regex newline

Python新手在这里,使用3.5。我觉得这个问题与其他问题相似,但是尽管已经阅读了这些并试图遵循给出的建议,但我仍然没有得到这个正则表达式的任何地方。

我有一个文本字符串,其中我想用空格替换所有换行符,这些换行符后面没有其他换行符或三个空格。我试图使用带有负前瞻的正则表达式来做到这一点。我已经知道我需要使用来自this conversation的多行。尽管如此,我的正则表达式并没有识别我的字符串中的任何内容。基本上,我想匹配并替换下面字符串中间的\ r \ n,同时保持字符串开头和结尾处的那些不变。

body = 'foo foo\r\n\xa0\xa0\xa0foo foo foo\r\n\foo foo foo foo foo\r\n\r\n\foo foo foo'

breakRegex = re.compile(r'(\r\n)?!(\r\n)|(\r\n)?!(\s\s\s)', s,re.M)

breakRegex.sub(' ', body)

期望的和迄今为止未得到的结果将是:

'foo foo\r\n\xa0\xa0\xa0foo foo foo foo foo foo foo foo\r\n\r\n\foo foo foo'

我也尝试了上面没有那么多括号,用\ s代替\ xa0等等,但它仍然不起作用...感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

这是你想要的吗?

break_regex = re.compile(r'\r\n(?!=\r\n|\s\s\s)', re.M)
  

所有换行\r\n,   其后没有(?!=...),   要么(|),   另一个换行符\r\n,   或三个空格\s\s\s

修改

  1. 抱歉,我犯了一个错误,你应该尽快删除正则表达式中的=。 :)

  2. 您的意思是?:

  3.   

    body ='foo foo \ r \ n \ xa0 \ xa0 \ xa0foo foo foo \ r \ nfoo foo foo foo foo \ r \ n \ r \ n \ nfoo foo foo'

    而不是:

      

    body ='foo foo \ r \ n \ xa0 \ xa0 \ xa0foo foo foo \ r \ n \ foo foo foo foo foo \ r \ n \ r \ n \ foo foo foo'`

    因为\f表示Formfeed0x0c)。

答案 1 :(得分:0)

def clean_with_puncutation(text):    
    from string import punctuation
    import re
    punctuation_token={p:'<PUNC_'+p+'>' for p in punctuation}
    punctuation_token['<br/>']="<TOKEN_BL>"
    punctuation_token['\n']="<TOKEN_NL>"
    punctuation_token['<EOF>']='<TOKEN_EOF>'
    punctuation_token['<SOF>']='<TOKEN_SOF>'
  #punctuation_token



    regex = r"(<br/>)|(<EOF>)|(<SOF>)|[\n\!\@\#\$\%\^\&\*\(\)\[\]\
           {\}\;\:\,\.\/\?\|\`\_\\+\\\=\~\-\<\>]"

###Always put new sequence token at front to avoid overlapping results
 #text = '<EOF>!@#$%^&*()[]{};:,./<>?\|`~-= _+\<br/>\n <SOF>\ '
    text_=""

    matches = re.finditer(regex, text)

    index=0

    for match in matches:
     #print(match.group())
     #print(punctuation_token[match.group()])
     #print ("Match at index: %s, %s" % (match.start(), match.end()))
        text_=text_+ text[index:match.start()] +" " 
              +punctuation_token[match.group()]+ " "
        index=match.end()
    return text_