这是一个创建于 2111 天前的主题,其中的信息可能已经有所发展或是发生改变。
string "[123]...(abc)"
需要将“ 123 ”提取到 key1,"abc"提取到 key2,(?<key1>)方式
问题是
[] 和 () 出现的顺序不确定,也可能是
string "(abc)...[123]"
能否一条正则搞定?
第 1 条附言 · 2018-07-13 13:18:31 +08:00
脑子秀逗了,忘了 findall 一个很重要的设定:
findall 的输出是按 pattern 中分组的顺序,而不是 string 中匹配出现的顺序
m=re.findall(r"(\{([a-z]+)\})|(\[([0-9]+)\])|(\(([a-z]+)\))", "(ace).[92387492].{abc}")
m
Out[24]:
[('', '', '', '', '(ace)', 'ace'),
('', '', '[92387492]', '92387492', '', ''),
('{abc}', 'abc', '', '', '', '')]
按照结果每个 tuple 的 index 读取就可以了
7 条回复 • 2018-07-17 12:46:33 +08:00
|
|
1
wizardoz 2018-07-13 12:54:26 +08:00 1
"\[(?P<key1>[0-9]+)\].+\((?P<key2>[a-z]+)\)"
|
|
|
2
imn1 2018-07-13 12:59:57 +08:00
|
|
|
3
zynlp 2018-07-13 13:16:40 +08:00 via iPhone 1
会不会有嵌套的情况呢?
|
|
|
4
rocketman13 2018-07-15 15:36:00 +08:00
正则我要提取或者替换的的文本中既有双引号也有单引号,那我概括选中这段文本时是不是要用三引号??
|
|
|
5
imn1 2018-07-15 15:43:31 +08:00
@ rocketman13 你干吗不自己发个帖问啊? 不需要,用转义就可以了,\' or \" 视乎外面用哪个
|
|
|
7
frostming 2018-07-17 12:46:33 +08:00
(?=.*?(\[.+?\]))(?=.*?(\(.+?\))).+?
|