2013-06-19 2 views
0

У меня есть текст, который отформатирован следующим образом:Анализ строк в Python, регулярное выражение?

| а затем | переменное число пробелов | а затем | соответствующий текст (путь а папку, содержащую пробелы | следуют | переменным числом белых пространств | следуют | не релевантный текст |

Моя цель состоит в том, чтобы извлечь два соответствующий текст, но у меня нет опыта в работе с регулярными выражениями (я считаю, что это то, что я должен использовать?)

заранее спасибо :)

Например:

68465d1wd  C:\nice\ pro g ram files\path.html   d d5 d w4d w5 d 4wd46 

Я хотел бы извлечь

Foo = 68465d1wd

бар = path.html

+1

можете ли вы привести пример кода? кажется, что вы можете использовать split(), чтобы сделать это – Twissell

+1

Какой ресурс вы используете для информации о регулярном выражении? Техника, в которой вы нуждаетесь, довольно проста. Используйте круглые скобки для соответствующего текста и '*' для переменной пробела. Вам просто нужно выяснить, как отделить ваш путь к папке от не относящегося к делу текста. –

+0

@Twissell отредактирован в примере –

ответ

1

Если ваши поля отделены друг от друга, по крайней мере двух пространств, это должно сделать это:

import re 
foo, bar, _irrelevant = re.split(r"\s{2,}", line) 

Edit: выше решение больше не работает для пересмотренного ответа. Если (как я понял из ваших комментариев) имя файла всегда имеет .php или .htm[l] расширение, и всегда есть путь до конечного файла, вы можете попробовать свою удачу следующим:

foo, rest = re.split(r"\s{2,}", line, 1) 
bar = re.search(r"[^\\]*\.(?:php|html?)\b", rest).group(0) 

Это даст вы все после последней обратной косой черты, предшествующей .php, .htm или .html. В принципе, есть регулярное выражение для всего, но вам нужно выяснить, как выглядят ваши данные.

+1

Что делать, если имя файла содержит в нем два или более пробела? –

+0

вот решение: 'foo, bar = (re.split (r" \ s {2,} ", строка) [0], re.split (r" \ s {2,} ", строка) [- 2 ]) ' – zmo

+0

Два или более _adjacent_ пробела в имени файла? Тогда либо вход неоднозначен, либо есть другие ограничения, которые мы можем использовать (например, если имя файла всегда имеет расширение, то неактуальный текст никогда не содержит обратных косых черт и т. Д.)) – alexis

1
>>> data = '''68465d1wd  C:\nice\ program files\path.html   dw6d5w4dw5d4wd46''' 
>>> re.split(r'\s{2,}', data) 
['68465d1wd', 'C:\nice\\ program files\\path.html', 'dw6d5w4dw5d4wd46'] 
>>> foo, bar = re.split(r'\s{2,}', data)[:2] 
>>> foo 
'68465d1wd' 
>>> bar 
'C:\nice\\ program files\\path.html' 
>>> import os 
>>> os.path.basename(bar) 
'path.html' 

Без регулярного выражения:

>>> foo, rest = data.split(' ', 1) 
>>> bar, rest = rest.lstrip().split(' ', 1) 
>>> foo 
'68465d1wd' 
>>> bar 
'C:\nice\\ program files\\path.html' 
>>> os.path.basename(bar) 
'path.html' 
+0

OP отредактировал вопрос и изменил данные. – dansalmo

Смежные вопросы