这是一个创建于 2180 天前的主题,其中的信息可能已经有所发展或是发生改变。
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
![wizardoz](https://cdn.v2ex.com/avatar/6601/10aa/45836_normal.png?m=1379921935) |
|
1
wizardoz 2018-07-13 12:54:26 +08:00 1
"\[(?P<key1>[0-9]+)\].+\((?P<key2>[a-z]+)\)"
|
![imn1](https://cdn.v2ex.com/avatar/8c53/b378/59630_normal.png?m=1641575254) |
|
2
imn1 2018-07-13 12:59:57 +08:00
|
![zynlp](https://cdn.v2ex.com/gravatar/0578ce3e5b8aa9e28d1dda3b4cc308ba?s=48&d=retro) |
|
3
zynlp 2018-07-13 13:16:40 +08:00 via iPhone 1
会不会有嵌套的情况呢?
|
![rocketman13](https://cdn.v2ex.com/avatar/257b/f794/316927_normal.png?m=1702363155) |
|
4
rocketman13 2018-07-15 15:36:00 +08:00
正则我要提取或者替换的的文本中既有双引号也有单引号,那我概括选中这段文本时是不是要用三引号??
|
![imn1](https://cdn.v2ex.com/avatar/8c53/b378/59630_normal.png?m=1641575254) |
|
5
imn1 2018-07-15 15:43:31 +08:00
@ rocketman13 你干吗不自己发个帖问啊? 不需要,用转义就可以了,\' or \" 视乎外面用哪个
|
![frostming](https://cdn.v2ex.com/avatar/217b/d18a/275917_normal.png?m=1713149404) |
|
7
frostming 2018-07-17 12:46:33 +08:00
(?=.*?(\[.+?\]))(?=.*?(\(.+?\))).+?
|