Python正则表达式 - 组匹配

时间:2016-04-20 02:48:47

标签: python regex

String filePath = "input.txt";
List<Integer[]> output = new ArrayList<>();

try(Stream<String> stream = Files.lines(Paths.get(filePath)) ) {

    stream.filter(line -> line != null && !line.isEmpty())
    .forEach(line->output.add(
        Arrays.stream(line.split(", "))//assuming that 2 numbers are separated by a comma followed by a white space
        .map(Integer::parseInt)
        .toArray(size -> new Integer[size])
    ));

} catch(Exception ex) {
    ex.printStackTrace();
}

output.forEach(s -> System.out.println(Arrays.toString(s)));

正如此代码段所示,我想得到([0, 0, 0, 0, 0] [0, 0, 1, 0, 0] [0, 1, 1, 1, 1] [0, 1, 1, 1, 0] [0, 0, 1, 1, 0] ),但它不起作用。

3 个答案:

答案 0 :(得分:1)

变化:

m = re.match(r'\((.*?)\w+cr\w/\w(.)\w/\w(.)\)', details)

要:

m = re.match(r'\((\S+)\s+cr\s+/\s+(\S)\s+/\s+(\S)\)', details)

\s是&#34;空格&#34;而\S是&#34;任何东西,但是空白&#34;。

答案 1 :(得分:0)

看起来你只是混淆了w和s ..可能不适合所有边缘情况:

Decimal:[127] : Octal:[177]
Decimal:[127] : Octal:[177]

答案 2 :(得分:0)

您可以使用\w[^\s)]*然后删除任何不需要的值:

>>> s = '(2,5  cr / K / M)'

>>> re.findall(r'\w[^\s)]*', s)
['2,5', 'cr', 'K', 'M']

然后您只需要在索引1处指定放弃cr的值。

>>> s = '(2,5  cr / K / M)'
>>> out = re.findall(r'\w[^\s)]*', s)
>>> credit = out[0]
>>> state = out[2]
>>> grade = out[3]
>>> course = {'credit': credit, 'state': state, 'grade': grade}
>>> course
{'state': 'K', 'grade': 'M', 'credit': '2,5'}