re.split()错误的解释?

时间:2016-10-15 20:17:51

标签: python split

我相信你会看到很多,但只是想警告你,我对编码仍然很陌生并且需要学习很多东西。每当我有时间的时候,我一直在尝试通过个人项目和youtube进行自学。

长版本:当我使用split函数时总是出错,但我仍然得到一个值。基本上我的功能应该是采用角度或度数,以度数分钟“秒”或例如“N 38°43'23 \”E“到十进制数。我利用小于90度的轴承来使用索引来查找字符串中的数字来转换角度。然而,如果角度不是一个方位,我想不出一种方法可以计算出数度将数量拉出多少十几个位置,所以我尝试将它分成度数符号。但是,当它执行此操作时,它会返回一个错误,指出split()需要非空模式匹配。这是什么意思?代码仍然有效,但始终会返回此错误。

简短版:这是我的代码:

def decimal(x):  # converts degrees-minutes-seconds to decimal
    dms = list(x)
    if dms[0] == 'N' or dms[0] == 'S':
        degrees = ((int(dms[2]) * 10) + int(dms[3]))
        minutes = ((int(dms[-8]) * 10) + int(dms[-7])) / 60
        seconds = ((int(dms[-5]) * 10) + int(dms[-4])) / 3600
    else:
        placeholder = re.split(r'\u00b0*', x)
        degrees = int(placeholder[0])
        minutes = ((int(dms[-6]) * 10) + int(dms[-5])) / 60
        seconds = ((int(dms[-3]) * 10) + int(dms[-2])) / 3600
    return degrees + minutes + seconds    

当我运行它时,我得到十进制数,但我也得到:

FutureWarning: split() requires a non-empty pattern match. 
  return _compile(pattern, flags).split(string, maxsplit)

我已经查看了有关此错误的其他问题,但没有解释说明要采取哪些措施来避免这种情况,或错误的真正含义。感谢您的任何帮助。此外,您所看到的任何建议或更正都将非常感谢!

2 个答案:

答案 0 :(得分:2)

你拥有的不是错误,而是警告。

首先,我认为你不应该使用原始字符串,你需要'\u00b0'这个字符。并且'c*'将匹配c中的0个或更多个,因此它与空字符串匹配。我相信这就是警告的内容。我建议你使用

re.split('\u00b0', x)

甚至更好,只是

 x.split('\u00b0')

答案 1 :(得分:1)

由于您使用的是正则表达式,因此您可以使用单个正则表达式解析整个字符串,并利用分组:

import re

def decimal_alt(x):
  REGEX = re.compile( u"([NS])\\s(\\d+)\u00B0(\\d+)\'(\\d+)\"")
  rm = REGEX.match(x)
  if rm is not None:
    sign = -1 if rm.group(1) == 'S' else +1
    d = float(rm.group(2))
    m = float(rm.group(3)) / 60.0
    s = float(rm.group(4)) / 3600.0
    return sign * ( d + m + s )

一起使用时
print decimal_alt(u"N 38\u00B040'20\"")

打印

38.6722222222