
字符串1: Tyrsovo Nám., 252 63 布拉格, 捷克共和国
字符串2: Via Augusta 127, 8006 巴塞罗那, 西班牙
字符串3: Victoria Regina Square 11-12, 1210 布鲁塞尔 - Botanique, 比利时
希望得出各个字符串的城市名,比如字符串1是,布拉格,字符串2是, 巴塞罗那,字符串3是布鲁塞尔等等
1 oott123 Jun 16, 2015 难道不是用逗号切开然后匹配中文就行了么…… |
2 iyangyuan Jun 16, 2015 via iPhone .*([\u2E80-\uFE4F]+).*,.*[\u2E80-\uFE4F]+.* 手机打的,没测,仅供参考 |
3 chopper Jun 16, 2015 中文 233333,不知道ascii对应值,随便找了个 [\u4e00-\u9fa5]+(?=.*,) |
4 funagi Jun 16, 2015 ``` Python 2.7.6 (default, Mar 22 2014, 22:59:38) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> s = u'''Tyrsovo Nám., 252 63 布拉格, 捷克共和国 ... Via Augusta 127, 8006 巴塞罗那, 西班牙 ... Victoria Regina Square 11-12, 1210 布鲁塞尔 - Botanique, 比利时''' >>> p = re.compile(u'([\u2E80-\u9FFF]+)') >>> for line in s.split('\n'): ... m = p.search(line) ... if m: ... print(m.group(1)) ... 布拉格 巴塞罗那 布鲁塞尔 >>> ``` |
5 lilydjwg Jun 16, 2015 你们这些用正则的都不知道有个东西叫 \p{Han} 么。当然,PCRE 和 Python 的 regex 第三方库才支持。 |
6 Biwood Jun 16, 2015 第一部 /\d\s.*(?=,\s)/,去除数字+空格开头,,以逗号结尾的部分; 第二部[\u4e00-\u9fa5],取出中文; 应该有办法一步完成的,我再研究研究 |
7 Biwood Jun 16, 2015 打错字了,两步都是“取出” |
9 picasso250 Jun 16, 2015 [^,]+,[\d ]+([^,]+) 解释: 匹配第一个逗号之前的内容. 匹配数字 匹配城市名 |
10 Septembers Jun 16, 2015 via Android 这是CSV格式啊 |
11 keepsome Jun 16, 2015 适用于一行仅两段中文 [^\x{4e00}-\x{9fa5}]+([\x{4e00}-\x{9fa5}]+)[^\x{4e00}-\x{9fa5}]+[\x{4e00}-\x{9fa5}]+\s+ 全部替换成$1 最后一行加个换行或者手动提取就行 notepad++实测成功 |
12 msg7086 Jun 16, 2015 @Septembers 并不是吧。 |
13 keepsome Jun 16, 2015 [^\x{4e00}-\x{9fa5}]+([\x{4e00}-\x{9fa5}]+)[^\x{4e00}-\x{9fa5}]+[\x{4e00}-\x{9fa5}]+.*\s+ 修订版,为了防止后一段中文之后还有字符 其他一致,全部替换成$1 最后一行加个换行或者手动提取 |
15 ElvisZhu Jun 16, 2015 ^[^,]+,[ 0-9]*([^0-9 ,]+).* 取\1 |
16 leavic Jun 17, 2015 先用逗号split一下吧,中文我还真不知道怎么搞,得查unicode代码 |
17 tntasdf Jun 17, 2015 // PHP $str="Tyrsovo Nám., 252 63 布拉格, 捷克共和国 Via Augusta 127, 8006 巴塞罗那, 西班牙 Victoria Regina Square 11-12, 1210 布鲁塞尔 - Botanique, 比利时"; preg_match_all('/([^\x00-\x80]+?)(,|\s-)/',$str,$mts); // 更不规则的,改括号2的正则 print_r($mts); // $mts[1] 就是了 事实上不需要拘泥于一个正则搞定,可以先做字符串处理。正则规则写得越复杂,效率越慢。 |
18 tntasdf Jun 17, 2015 写的是php , python不懂多少 。 主要看正则,大致是可以移植的。PHP中需要[^\x00-\x80]来匹配中文,python的话应该是其他, 另外就是非贪婪模式了。 |
19 dallaslu Jun 17, 2015 ,[\d\s]+(.*?)[,\s] |
20 dallaslu Jun 17, 2015 |
21 tsingyi Jun 17, 2015 如果只是取出第一个中文字符串的话可以用正则表达式的断言: (?!=[\u4E00-\u9FBF]+)[\u4E00-\u9FBF]+(?=\s|,) (?!=[\u4E00-\u9FBF]+) 确保之前没有中文字符 (?=\s|,)确保字符后为逗号或空格 |
22 asj Jun 17, 2015 用excel打开,复制列 |
23 ToughGuy Jun 17, 2015 import re s = 'xxxxxx' re.findall(r'\d+ ([^\d ,]+)[, ]', s) |
24 wuhx Jun 18, 2015 上一个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()) } |