Вопрос:

Расщепление строки с несколькими разделителями в определенном порядке

python string split

291 просмотра

2 ответа

1 Репутация автора

Я имею дело с типом файла ASCII, где фактически есть 4 столбца данных, и каждая строка назначается одной строке в файле. Ниже приведен пример строки данных из этого файла

'STOP.F 11966.0000:STOP DEPTH'

Данные всегда структурированы таким образом, что разделитель между первым и вторым столбцом - это точка, разделитель между вторым и третьим столбцом - это пробел, а разделитель между третьим и четвертым столбцом - это двоеточие.

В идеале я хотел бы найти способ вернуть следующий результат из строки выше

['STOP', 'F', '11966.0000', 'STOP DEPTH']

Я попытался использовать регулярное выражение с точкой, пробелом и двоеточием в качестве разделителей, но оно не работает (см. Пример ниже), потому что я не знаю, как указать конкретный порядок, в котором нужно разбить строку, и я не знаю если есть способ указать максимальное количество разбиений на разделитель прямо в самом регулярном выражении. Я хочу, чтобы разделить разделители в определенном порядке и каждый разделитель максимум 1 раз.

import re
line = 'STOP.F 11966.0000:STOP DEPTH'
re.split("[. :]", line)
>>> ['STOP', 'F', '11966', '0000', 'STOP', 'DEPTH']

Любые предложения по аккуратному способу сделать это?

Автор: subsurfer Источник Размещён: 08.11.2017 10:09

Ответы (2)


1 плюс

748 Репутация автора

Это может сработать. Кредит Хуану

import re
pattern = re.compile(r'^(.+)\.(.+) (.+):(.+)$')
line = 'STOP.F 11966.0000:STOP DEPTH'
pattern.search(line).groups()
Out[6]: ('STOP', 'F', '11966.0000', 'STOP DEPTH')
Автор: Jose A. Размещён: 08.11.2017 10:24

0 плюса

65216 Репутация автора

re.split() решение с определенным шаблоном регулярных выражений:

import re

s = 'STOP.F 11966.0000:STOP DEPTH'
result = re.split(r'(?<=^[^.]+)\.|(?<=^[^ ]+) |:', s)

print(result)

Выход:

['STOP', 'F', '11966.0000', 'STOP DEPTH']
Автор: RomanPerekhrest Размещён: 08.11.2017 10:27
Вопросы из категории :
32x32