来吧,各位正则达人们,来做道题帮我进步

2015-12-29 15:31:20 +08:00
 northisland

楼主的正则扔了好久不弄已经捡不起来了,只是记得貌似用正则表达式可以表示任意字符串,以便查找 /替换 /删除所需要的目标。

那么我现在有这样的一个字符串:
addr: "24330208"

我想把冒号前后(不包含空格和引号)的两项提取出来,用正则应该怎么弄呢?
语言不限。

我用 python 写
m=re.search('[ ]*( \ w * ) : [ \"] *( \ s * ) [ \"] *', ' addr: "24330208"')
m.group()
请问问题在哪里?

谢了

1916 次点击
所在节点    正则表达式
9 条回复
whosesmile
2015-12-29 15:36:24 +08:00
1.这么简单的东西为什么要用正则? string.split 不行吗?
2.好吧,还是写个给你(js):/(addr):\s*\"(\d+)\"/.exec('addr: "24330208"')
feiyuanqiu
2015-12-29 15:41:22 +08:00
var s = 'addr: "24330208"', r = /(\w+):\s*"(\w+)"/;
s.match(r);
northisland
2015-12-29 15:46:51 +08:00
其实前后两段,空格数量,有无引号是不一定的

m=re.search('(.*):(.*)', ' addr: "24330208"')
if m:
print m.group(1).replace('"','').strip(), group(2).replace('"','').strip()
是可行的
但是我想看看有没有不把结果去引号、空格的做法
zwhu
2015-12-29 16:02:38 +08:00
/(\w+):\s*(?:(?:"(.+?)")|(.+))/

这样应该能满足
sennes
2015-12-29 16:09:46 +08:00
http://regexper.com/
把正则丢进去图示一下,就知道怎么修改和补充条件了。
gimp
2015-12-29 16:25:11 +08:00
hqs123
2015-12-29 16:46:34 +08:00
不懂,但来学习下...
chemzqm
2015-12-29 17:20:01 +08:00
vim:
let list= matchlist('addr: "343423"', '\v^(\w+)\s*:\s*"(.*)"')
echo list[1]
echo list[2]

javascript
var ms = 'addr: "424344"'.match(/^(\w+)\s*:\s*"(.*)"/)
console.log(ms[1])
console.log(ms[2])

python
import re
m = re.search('^(\w+)\s*:\s*"(.*)"','abbr: "42414"')
m.group(1)
m.group(2)

贪婪匹配版本
DejaVud
2015-12-29 17:34:39 +08:00
楼主问了他写的正则问题在哪,所以我来试回答下
1.用 raw string, r"[]*(\w*):[\"]*(\s*)[\"]*",否则'\'会导致转置
2.\s 不是用来匹配数字
再试试

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

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

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

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

© 2021 V2EX