楼主的正则扔了好久不弄已经捡不起来了,只是记得貌似用正则表达式可以表示任意字符串,以便查找 /替换 /删除所需要的目标。
那么我现在有这样的一个字符串:
addr: "24330208"
我想把冒号前后(不包含空格和引号)的两项提取出来,用正则应该怎么弄呢?
语言不限。
我用 python 写
m=re.search('[ ]*( \ w * ) : [ \"] *( \ s * ) [ \"] *', ' addr: "24330208"')
m.group()
请问问题在哪里?
谢了
1
whosesmile 2015-12-29 15:36:24 +08:00 1
1.这么简单的东西为什么要用正则? string.split 不行吗?
2.好吧,还是写个给你(js):/(addr):\s*\"(\d+)\"/.exec('addr: "24330208"') |
2
feiyuanqiu 2015-12-29 15:41:22 +08:00 1
var s = 'addr: "24330208"', r = /(\w+):\s*"(\w+)"/;
s.match(r); |
3
northisland OP 其实前后两段,空格数量,有无引号是不一定的
m=re.search('(.*):(.*)', ' addr: "24330208"') if m: print m.group(1).replace('"','').strip(), group(2).replace('"','').strip() 是可行的 但是我想看看有没有不把结果去引号、空格的做法 |
4
zwhu 2015-12-29 16:02:38 +08:00 1
/(\w+):\s*(?:(?:"(.+?)")|(.+))/
这样应该能满足 |
5
sennes 2015-12-29 16:09:46 +08:00 2
http://regexper.com/
把正则丢进去图示一下,就知道怎么修改和补充条件了。 |
6
gimp 2015-12-29 16:25:11 +08:00 1
|
7
hqs123 2015-12-29 16:46:34 +08:00 1
不懂,但来学习下...
|
8
chemzqm 2015-12-29 17:20:01 +08:00 1
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) 贪婪匹配版本 |
9
DejaVud 2015-12-29 17:34:39 +08:00 1
楼主问了他写的正则问题在哪,所以我来试回答下
1.用 raw string, r"[]*(\w*):[\"]*(\s*)[\"]*",否则'\'会导致转置 2.\s 不是用来匹配数字 再试试 |