正则大神,一个正则问题

2015-06-16 18:34:29 +08:00
 1oscar

字符串1: Tyrsovo Nám., 252 63 布拉格, 捷克共和国
字符串2: Via Augusta 127, 8006 巴塞罗那, 西班牙
字符串3: Victoria Regina Square 11-12, 1210 布鲁塞尔 - Botanique, 比利时

希望得出各个字符串的城市名,比如字符串1是,布拉格,字符串2是, 巴塞罗那,字符串3是布鲁塞尔等等

后面的字符串可能还会更加的不规则,但是唯一的规律就是都有两处中文,城市与国家,要求取出城市名

求指导

5117 次点击
所在节点    Python
24 条回复
tsingyi
2015-06-17 09:48:57 +08:00
如果只是取出第一个中文字符串的话可以用正则表达式的断言:

(?!=[\u4E00-\u9FBF]+)[\u4E00-\u9FBF]+(?=\s|,)

(?!=[\u4E00-\u9FBF]+) 确保之前没有中文字符
(?=\s|,)确保字符后为逗号或空格
asj
2015-06-17 10:09:14 +08:00
用excel打开,复制列
ToughGuy
2015-06-17 15:30:44 +08:00
import re

s = 'xxxxxx'

re.findall(r'\d+ ([^\d ,]+)[, ]', s)
wuhx
2015-06-18 00:27:18 +08:00
上一个scala的版本

val str = """字符串1: Tyrsovo Nám., 252 63 布拉格, 捷克共和国
字符串2: Via Augusta 127, 8006 巴塞罗那, 西班牙
字符串3: Victoria Regina Square 11-12, 1210 布鲁塞尔 - Botanique, 比利时"""

val pat = """(\p{IsHan}+)""".r

for(lines <- str.split("\n")) {
val m = pat.findAllMatchIn(lines)
println(m.drop(1).next())
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/199054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX