2016-08-21 2 views
-3

Что такое регулярное выражение для извлечения всех строк, начинающихся с цифры?Найти все строки, начинающиеся с цифры

Я знаю, что символ ^ используется, чтобы соответствовать чему-либо в начале строки, но я не строю его правильно.

Вот что я пробовал:

re.findall('^[0-9]+',mystring). 
+3

так, что происходит? каков ваш вклад, каков ваш результат, что вы пытались сделать, чтобы исправить проблему, ... – UnholySheep

+3

Вы забыли модификатор 'MULTILINE' и'. * 'для соответствия остальной части строки. Однако это не лучший способ. Разделите с помощью '\ n' и проведите по линиям, проверяя, является ли первый символ цифрой. См. Http://ideone.com/dO4AYB –

+0

^^ Yup. Именно это я и сделаю. – idjaw

ответ

2

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

re.findall('^[0-9].*', mystring, re.MULTILINE) 
+0

Нет смысла использовать '+' после '[0-9]'. Он будет работать даже без него. –

+0

Вы правы. Я просто скопировал код вопроса и поместил исправление, не слишком тщательно изучив его. – gowrath

3

Вы забываете re.MULTILINE модификатор и .* после [0-9], чтобы соответствовать остальной части линии. Если вы, , были, чтобы использовать регулярное выражение, вы должны использовать r"(?m)^[0-9].*". Однако это не лучший способ. Разделите с помощью \ n и проведите по линиям, проверяя, является ли первый символ цифрой.

Вот что я предлагаю:

with open('file', 'r') as f: 
    for line in f: 
     if len(line) > 0 and line[0].isdigit(): 
      print(line) 

См this Python demo

+2

Вы имеете в виду, если len (строка)> 0 и строка [0] .isdigit() правильно? ваше решение вызывает индекс вне диапазона –

+0

@PrashantBhanarkar Да, это должно быть 'len (line)> 0', а не' line [0] '. –

+0

Извините, я помещаю детей в постель .... исправлено. –

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