如何捕获由[0-9]+
分隔的(\], \[)
个群组?例如,在
[[[[u'1', u'2'], u'3'], u'4'], [[[u'1', u'2'], u'4'], [[u'1', u'5'], u'4']]]
我想捕获三个群组,1 2 3 4
,1 2 4
和1 5 4
。
答案 0 :(得分:1)
假设您没有像[[u'1', u'2'], [u'3',u'5']]
这样的子模式(同一级别的多个嵌套子组,在这种情况下您需要使用堆栈并像下推自动机一样解析)您可以做这有正则表达式分两步:
(1)用正则表达式\]\s*,\s*\[
拆分表达式以获得组,然后根据提供的示例获得3组。
(2)在每个组中使用正则表达式[^0-9u]*u'([0-9]+)'[^0-9u]*
来提取数字。
例如,在R
中,代码为:
str <- "[[[[u'1', u'2'], u'3'], u'4'], [[[u'1', u'2'], u'4'], [[u'1', u'5'], u'4']]]"
groups <- unlist(strsplit(str, split='\\]\\s*,\\s*\\['))
pattern <- "[^0-9u]*u'([0-9]+)'[^0-9u]*"
lapply(groups, function(str) gsub(pattern, "\\1", regmatches(str,gregexpr(pattern,str))[[1]]))
#[[1]]
#[1] "1" "2" "3" "4"
#[[2]]
#[1] "1" "2" "4"
#[[3]]
#[1] "1" "5" "4"
在python
:
import re
str = "[[[[u'1', u'2'], u'3'], u'4'], [[[u'1', u'2'], u'4'], [[u'1', u'5'], u'4']]]"
groups = re.split('\]\s*,\s*\[', str)
pattern = "[^0-9u]*u'([0-9]+)'[^0-9u]*"
print map(lambda x: re.findall(pattern, x), groups)
# [['1', '2', '3', '4'], ['1', '2', '4'], ['1', '5', '4']]
如果需要,您可以将数字映射到整数。