2015-05-21 6 views
0

У меня вопрос о регулярных выражениях в Python. Я работаю над проектом, для которого я должен разбирать кучу огромных текстовых файлов и извлекать определенные части из них в электронную таблицу. Одна его часть - куча размеров партий, выраженная в форме "NUMBERxNUMBERxNUMBER...". Они хранятся в середине гораздо большей линии, как это:Python Регулярное выражение - извлечение координат

Spring st. , No. 208, 18.9x42.2x49x10x8x100. 'John S. Giles, exr. to Herman Goodstein, W. D. . 11,100 

Я пытаюсь создать регулярное выражение, которое дало бы:

18.9x42.2x49x10x8x100 

Но я не совсем уверен, когда начать. Каким будет лучший способ создать выражение этого типа, где может быть любое количество чисел (с десятичными точками), разделенных x? Пробелы остановили бы анализ. Заранее спасибо за помощь, я очень благодарен за это!

ответ

2
>>> import re 
>>> s = '''Spring st. , No. 208, 18.9x42.2x49x10x8x100. 'John S. Giles, exr. to Herman Goodstein, W. D. . 11,100''' 
>>> re.search('(?:\d+(?:\.\d+)?x)+\d+(?:\.\d+)?', s) 
<_sre.SRE_Match object; span=(22, 43), match='18.9x42.2x49x10x8x100'> 
>>> _.group(0) 
'18.9x42.2x49x10x8x100' 

Регулярное выражение состоит из \d+(?:\.\d+)? дважды, который только представляет собой число цифр, необязательно с последующей точкой с более цифрами. Мы делаем это, чтобы предотвратить конечную точку. Выражение ищет эту «числовую часть», а затем x как можно чаще, а затем требует окончательную «номерную часть».

+0

[Это также будет соответствовать '18% 9x42T2x49x10x8'.] (Https://regex101.com/r/tP7oX1/1) –

+0

@stribizhev Спасибо! Забыл избежать фиксированной точки! – poke

+0

Ты спасатель, большое спасибо! –