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