Python正则表达式匹配问题

待处理的部分文本(为方便阅读,已做换行处理,实际文本没有)如下:

var station_names ='@bjb|北京北|VAP|beijingbei|bjb|0
@bjd|北京东|BOP|beijingdong|bjd|1
@bji|北京|BJP|beijing|bj|2
@bjn|北京南|VNP|beijingnan|bjn|3
@bjx|北京西|BXP|beijingxi|bjx|4
@gzn|广州南|IZQ|guangzhounan|gzn|5
@cqb|重庆北|CUW|chongqingbei|cqb|

最开始的代码是这样的:

r=requests.get(url,verify=False)
stations=re.findall(r'([A-Z]+)|([a-z]+)',r.text)
stations=dict(stations)
stations=dict(zip(stations.values(),stations.keys()))

得到的输出如下:

{   'acheng': 'ACB',
    'aershan': 'ART',
    'aershanbei': 'ARX',
    'aihe': 'AHP',
    'aijiacun': 'AJJ',
}

现在在Python中,想进一步,用正则表达式提取出其中的中文站名和对应的英文大写缩写。尝试了多次都失败了。。。请问要怎么写。。。
也就是说想要输出的是:

{   '阿城': 'ACB',
    '阿尔山': 'ART',
    '阿尔山北': 'ARX',
    '艾河': 'AHP',
    '艾家村': 'AJJ',
}

阅读 3k
2 个回答

12306 站点信息 ,Python3

station_names ='@bjb|北京北|VAP|beijingbei|bjb|0@bjd|北京东|BOP|beijingdong|bjd|1@bji|北京|BJP|beijing|bj|2@bjn|北京南|VNP|beijingnan|bjn|3@bjx|北京西|BXP|beijingxi|bjx|4@gzn|广州南|IZQ|guangzhounan|gzn|5@cqb|重庆北|CUW|chongqingbei|cqb|6@cqi|重庆|CQW|chongqing|cq|7@cqn|重庆南|CRW|chongqingnan|cqn|8@gzd|广州东|GGQ|guangzhoudong|gzd|9@sha|上海|SHH|shanghai|sh|10@shn|上海南|SNH|shanghainan|shn|11@shq|上海虹桥|AOH|shanghaihongqiao|shhq|12@shx|上海西|SXH|shanghaixi|shx|13@tjb|天津北|TBP|tianjinbei|tjb|14@tji|天津|TJP|tianjin|tj|15@tjn|天津南|TIP|tianjinnan|tjn|16'

import re, pprint as pp
'''
@拼音缩写三位|站点名称|编码|拼音|拼音缩写|序号
'''
ptn=re.compile(r'@[^|]+'   #拼音缩写三位
               r'\|([^|]+)'#站点名称
               r'\|([^|]+)'#编码
               r'\|[^|]+'  #拼音
               r'\|[^|]+'  #拼音缩写
               r'\|[^@]+'  #序号
               ,re.X)
               
sname=dict(ptn.findall(station_names))
pp.pprint(sname)

效果:

{'上海': 'SHH',
 '上海南': 'SNH',
 '上海虹桥': 'AOH',
 '上海西': 'SXH',
 '北京': 'BJP',
 '北京东': 'BOP',
 '北京北': 'VAP',
 '北京南': 'VNP',
 '北京西': 'BXP',
 '天津': 'TJP',
 '天津北': 'TBP',
 '天津南': 'TIP',
 '广州东': 'GGQ',
 '广州南': 'IZQ',
 '重庆': 'CQW',
 '重庆北': 'CUW',
 '重庆南': 'CRW'}

python3

import re
station_names = '@bjb|北京北|VAP|beijingbei|bjb|0@bjd|北京东|BOP|beijingdong|bjd|1@bji|北京|BJP|beijing|bj|2@bjn|北京南|VNP|beijingnan|bjn|3@bjx|北京西|BXP|beijingxi|bjx|4@gzn|广州南|IZQ|guangzhounan|gzn|5@cqb|重庆北|CUW|chongqingbei|cqb|6@cqi|重庆|CQW|chongqing|cq|7@cqn|重庆南|CRW|chongqingnan|cqn|8@gzd|广州东|GGQ|guangzhoudong|gzd|9@sha|上海|SHH|shanghai|sh|10@shn|上海南|SNH|shanghainan|shn|11@shq|上海虹桥|AOH|shanghaihongqiao|shhq|12@shx|上海西|SXH|shanghaixi|shx|13@tjb|天津北|TBP|tianjinbei|tjb|14@tji|天津|TJP|tianjin|tj|15@tjn|天津南|TIP|tianjinnan|tjn|16'

group = re.findall('@(.+?)\|(.+?)\|', station_names)
print({item[1]:item[0] for item in group})

结果

{'上海西': 'shx', '重庆北': 'cqb', '广州东': 'gzd', '重庆': 'cqi', '北京东': 'bjd', '天津北': 'tjb', '北京南': 'bjn', '重庆南': 'cqn', '天津': 'tji', '上海南': 'shn', '北京北': 'bjb', '上海': 'sha', '广州南': 'gzn', '北京西': 'bjx', '北京': 'bji', '天津南': 'tjn', '上海虹桥': 'shq'}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题