用符号和大写字母拆分 Python 正则表达式

Posted

技术标签:

【中文标题】用符号和大写字母拆分 Python 正则表达式【英文标题】:Split in Python regex with symbol and uppercase letter 【发布时间】:2020-06-08 13:19:40 【问题描述】:

本着这个问题的精神:Converting pandas data frame with degree minute second (DMS) coordinates to decimal degrees 我想将格式为例如 18-23-34W 的经度转换为小数,即 -18.392778。我想用减号、- 和大写来分隔。

链接中的功能我一直在尝试,适应我的需要:

def dms2dd(s):
    degrees, minutes, seconds, direction = re.split('[A-Z-]+', s)
    dd = float(degrees) + float(minutes) / 60 + float(seconds) / (60 * 60)
    if direction in ('S', 'W'):
        dd *= -1
    return dd

问题似乎出在degrees, minutes, seconds, direction = re.split('[A-Z-]+', s) 中的正则表达式上。我得到了转换,但没有得到-1的乘法,这是应该的。谢谢。

【问题讨论】:

【参考方案1】:

您的seconds 将给您'34' - 因为您“删除”了W:永远不会保留拆分字符。

可能的修复:

import re

def dms2dd(s):
    degrees, minutes, seconds, *_ = re.split('[A-Z-]+', s)
    direction = s[-1]

    dd = float(degrees) + float(minutes)/60 + float(seconds)/(60*60)
    if direction in ('S','W'):
        dd*= -1
    return dd


print(dms2dd("18-23-34W"))  # -18.392777777777777  - add a round(_,6) to get yours

【讨论】:

以上是关于用符号和大写字母拆分 Python 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式标点分割[Python]

python 正则表达式通过标点符号进行拆分

python中&符号、字母字符和等号的正则表达式

如何使用正则表达式 python3 替换除空格和换行符旁边的数字以外的所有其他符号

基于正则表达式拆分字符串

正则表达式[\u4E00-\u9fa5]为啥能匹配到数字,字母和某些符号?