这个正则该怎么写?

2017-12-14 11:34:00 +08:00
 omph
有如下两种格式的信息,想提取名称和地址信息:

1、供应商名称:肇 庆市锐装有限公司 2、法人 : 郑均 3、地址: 肇庆市梅庵路
供应商名称:肇 庆市锐装有限公司 法人 : 郑均 地址: 肇庆市梅庵路

如果这样写正则:供应商名称\s*:\s*(.{,30})\s*\d?.*?法人.{,40}?地址:\s*(\S+)
对于第一种格式的结果会是:肇 庆市锐装有限公司 2、

如果 ?能优先从 1 次而非 0 次开始匹配就好了
3507 次点击
所在节点    Python
14 条回复
mengzhuo
2017-12-14 11:39:02 +08:00
不用正则……直接按值分隔,然后按数组取搞定了……

一个问题用正则,现在你有两个问题了
mineqiqi
2017-12-14 11:44:58 +08:00
@mengzhuo 没毛病
polymerdg
2017-12-14 11:48:33 +08:00
var_dump(explode(':',$str));
geelaw
2017-12-14 11:49:05 +08:00
? 确实是优先匹配 1 而不是 0。只要让 * 优先匹配更少的次数即可,方法是把 * 换为 *?
vincenttone
2017-12-14 12:13:45 +08:00
/名称:(.+?) .*地址:(.*)/
如果 “肇 庆市锐装有限公司” 里面没有空格的话
ffkjjj
2017-12-14 14:19:38 +08:00
String regex = "供应商名称\\s*:\\s*(.{0,30}\\D)(\\s2?)\\s*\\d?.*?法人.{0,40}?地址:\\s*(\\S+) ";
ffkjjj
2017-12-14 14:25:13 +08:00
也可以这样,
tring regex = "供应商名称\\s*:\\s*(.{0,30}\\s)(2?)\\s*\\d?.*?法人.{0,40}?地址:\\s*(\\S+) ";
给 .{0,30} 一个 2 之前的结束标志就好了,就可以将 “肇 庆市锐装有限公司” 放在一个组里面。
araraloren
2017-12-14 14:47:46 +08:00
I thought I was in sf.gg.
wellCh4n
2017-12-14 16:40:30 +08:00
我觉得 先用正则 \d*、把序列编号用空格代替了之后用:和空格 kv 分割 比较方便啊。。
laqow
2017-12-14 16:46:14 +08:00
把空格标点数字全删了按几个标题字符断一下
taofuan
2017-12-14 17:15:34 +08:00
得用环视吧
(?<=供应商名称:).+(?=2、)|(?<=2、).+(?=3、)|(?<=3、地址:).+
taofuan
2017-12-14 17:16:22 +08:00
改一下
(?<=供应商名称:).+(?=2、)|(?<=2、法人 :).+(?=3、)|(?<=3、地址:).+
yucongo
2017-12-14 23:10:35 +08:00
In [25]: s1 = '1、供应商名称:肇 庆市锐装有限公司 2、法人 : 郑均 3、地址: 肇庆市梅庵路 '

In [26]: s2 = '供应商名称:肇 庆市锐装有限公司 法人 : 郑均 地址: 肇庆市梅庵路'

In [27]: pat = re.compile(r'(?:\d、)?供应商名称:(\D+)(?:\d、)?法人 :.+地址:(.+)$')

In [28]: pat.search(s1).groups()
Out[28]: ('肇 庆市锐装有限公司 ', ' 肇庆市梅庵路 ')

In [29]: pat.search(s2).groups()
Out[29]: ('肇 庆市锐装有限公司 ', ' 肇庆市梅庵路')
cnaol
2017-12-15 17:23:56 +08:00
> import re
s1 = '1、供应商名称:肇 庆市锐装有限公司 2、法人 : 郑均 3、地址: 肇庆市梅庵路 '
s2 = '供应商名称:肇 庆市锐装有限公司 法人 : 郑均 地址: 肇庆市梅庵路 '

recom = re.compile(r'(?<=供应商名称:)(?P<company>[^ ]* ?[^ ]*).*(?<=法人 : )(?P<owner>[^ ]*).*(?<=地址: )(?P<addr>[^ ]*).*')
print(recom.findall(s1))
print(recom.findall(s2))

##############
[('肇 庆市锐装有限公司', '郑均', '肇庆市梅庵路')]
[('肇 庆市锐装有限公司', '郑均', '肇庆市梅庵路')]

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

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

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

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

© 2021 V2EX