【问题标题】:Replace ",**" with a linebreak using RegEx (or something else)使用正则表达式(或其他)将“,**”替换为换行符
【发布时间】:2010-06-02 08:26:51
【问题描述】:

我开始使用 RegEx,我想知道是否有人可以帮助我制作一个语句来转换坐标,如下所示:

145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16

145.00694,-37.80421
145.00686,-37.80382
145.00595,-37.8035 
145.00586,-37.80301

(去掉最后一个逗号和值,把它变成换行符。)

我不知道如何使用通配符来做类似的事情。任何帮助将不胜感激!谢谢。

【问题讨论】:

标签: python regex string kml


【解决方案1】:

“有些人,当遇到一个 问题,想'我知道,我会用 常用表达。'现在他们有 两个问题。” --Jamie Zawinski

避免这个问题并使用字符串方法:

s="145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,37.80301,16"

lines = s.split(' ') # each line is separated by ' '
for line in lines:
    a,b,c=line.split(',') # three parts, separated by ','
    print a,b

正则表达式有其用途,但这不是其中之一。

【讨论】:

    【解决方案2】:
    >>> import re
    >>> s="145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16"
    >>> print re.sub(",\d*\w","\n",s)
    145.00694,-37.80421
    145.00686,-37.80382
    145.00595,-37.8035
    145.00586,-37.80301
    

    【讨论】:

    • 这又是一个很好的例子来说明正则表达式是多么脆弱:这只适用于第二个数字 (-37.X) 为负数...
    • 是的,我刚刚注意到...我将如何修改它以使其匹配“,[两位数][空白]”?我正在尝试 ",\d\d\w" 但这似乎不起作用。
    【解决方案3】:

    字符串方法在这里似乎就足够了,正则表达式是多余的:

    >>> s='145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16'
    >>> print('\n'.join(line.rpartition(',')[0] for line in s.split()))
    145.00694,-37.80421
    145.00686,-37.80382
    145.00595,-37.8035
    145.00586,-37.80301
    

    【讨论】:

      【解决方案4】:
      >>> s = '145.00694,37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16
      >>> patt = '(%s,%s),%s' % (('[+-]?\d+\.?\d*', )*3)
      >>> m = re.findall(patt, s)   
      >>> m
      ['145.00694,37.80421', '145.00686,-37.80382', '145.00595,-37.8035', '145.00586,-37.80301']
      >>> print '\n'.join(m)
      145.00694,37.80421
      145.00686,-37.80382
      145.00595,-37.8035
      145.00586,-37.80301
      

      但我更喜欢在这种情况下使用正则表达式

      我喜欢SilentGhost解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 2014-03-10
        • 2019-08-16
        • 1970-01-01
        • 2013-02-21
        相关资源
        最近更新 更多