当一个句子中有多对引号的时候,例如:
Last "week" I "went" to the "theatre"
正则表达式"[^"]+"只能匹配最后一个引号里的内容:theatre
我想匹配第二个引号里的内容( went ),该怎么写规则呢?
1
choury 2019 年 6 月 20 日 via Android
多匹配点,然后别的不捕获
|
2
mooncakejs 2019 年 6 月 20 日
'Last "week" I "went" to the "theatre"'.match(/"\w+"/g)
|
3
guxianbang OP @mooncakejs 匹配不到
|
4
clarkyi 2019 年 6 月 20 日
"\w+"$
|
6
mooncakejs 2019 年 6 月 20 日
@guxianbang 这是全匹配出来,找最后一个就好了。
只要最后一个就 'Last "week" I "went" to the "theatre"'.match(/"\w+"$/) |
7
daxiaolian PRO |
8
loryyang 2019 年 6 月 20 日
re.match(r'[^"]*"[^"]*"[^"]*"([^"]*)".*', 'Last "week" I "went" to the "theatre"').group(1)
得到 went |
9
daxiaolian PRO @guxianbang 我觉得不是正则的问题,是你获取的不对
|
10
guxianbang OP 谢谢各位🙏,我研究一下
|
11
pkookp8 2019 年 6 月 20 日 via Android
^.*?".*?".*?"(.*?)"
\1 |
12
ahaodady 2019 年 6 月 20 日
解题问问,突然想到的一个问题
|
13
ahaodady 2019 年 6 月 20 日
12345
使用 \d{2} 只能取到 12、34 我怎么取 23、45 呢 |
14
ahaodady 2019 年 6 月 20 日
顺便回答题主,你的正则会取出所有引号里的内容,如果确定是最后一项的话,在代码里取最后一条即可。
如果是编辑器里的话,结尾带个$ "([^"]+)"$ |
15
azh7138m 2019 年 6 月 20 日
零宽断言?
^.*?(?<=".*?").*?"(.*?)" 先匹配一个"",然后取后面这个"" |
16
zhzbql 2019 年 6 月 20 日
js 解法
/^.*?".*?".*?"(.*?)"/.exec('Last "week" I "went" to the "theatre"')[1] 或 'Last "week" I "went" to the "theatre"'.match(/".*?"/g)[1] |
17
hjq98765 2019 年 6 月 20 日
|
18
ismyyym 2019 年 6 月 20 日
python:
import re str='Last "week" I "went" to the "theatre"' x=re.search('^.*?".*?".*?"(.*?)"',str ).group(1) #正数第二个”“ y=re.search('.*"(.*?)".*?".*?".*?$',str ).group(1) #倒数第二个”“ z=re.findall('"(.*?)"',str)[1] # 返回所有”“,取第二个 用对下面这些 ^ $ *? 开头 结尾 尽可能少 |