2016-09-11 4 views
-7

У меня есть следующая строкаРегулярное выражение для разделения строк

Длинные строки 1 [успеха и 50] длинная строка 2 [яблоко 5 банан 20 оранжевый 75] длинная строка 3 [неудача: 100]

Теперь я хочу, чтобы разделить его на три строки:

  1. Длинная строка 1 [50 успеха и]
  2. длинная строка 2 [яблоко 5 банан 20 оранжевый 75]
  3. длинная строка 3 [неудача: 100]

внутри [] не может быть один или более экземпляров комбинации строки и числа, и число от 0 до 100.

Как это можно сделать с помощью регулярного выражения в python?

+0

Вы просто хотите добавить новые строки? –

+2

Что вы уже пробовали? – Leva7

+0

Кажется, вам не нужны регулярные выражения, просто разделите строку символом ']'. –

ответ

3

Нет необходимости в регулярных выражениях в такой простой задаче. Просто используйте Python встроенный str.replace() метод, как так:

your_str = your_str.replace(']', ']\n') 

разбить его и получить список, используйте your_str.split(']')

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

import re 

your_str = "Long string 1 [sucess 50] long string 2 [apple 5 banana 20 orange 75] long string 3 [failure: 100]" 

your_str = re.sub(r'\[(.+? [0-9]+)\] ', r'[\1]\n', your_str) 

print(your_str) 

следующий код создает этот вывод:

Long string 1 [sucess 50] 
long string 2 [apple 5 banana 20 orange 75] 
long string 3 [failure: 100] 

Но это будет строка. Чтобы получить список строк, вы можете просто разделить на новой строки, как это:

your_str.split('\n') 
+0

жаль, что недостаточно ясна. длинная строка также может содержать [] и().так что вход будет: "(условие (яблоко) [сбор 100] (в (номер_узла) [2110 3211 3299 2672 5087]) [чистый 50] (или (в (номер телефона) [3213335512 3113337843 2332224083 3221112625]) (в (apt_size) [1030 2165]) (in (parcel_id) [3133 8314 8886])) [[10000] 3211 3299 2672 5087]) [clean 50] " " (или (in (phone_number) [3213335512 3113337843 2332224083 3221112625]) (in (apt_size) [1030 2165]) (in (parcel_id) [3133 8314 8886])) [ заряд 100] « –

+0

Я думаю, что я всегда хочу разделить на []. Я не знаю, как это можно сделать в regex –

0
In [79]: import re 

In [80]: my_string = "Long string 1 [sucess 50] long string 2 [apple 5 banana 20 orange 75] long string 3 [failure: 100]" 

In [81]: re.findall(r'([^\[]*\[[^\]]*\])(?: ?)', my_string) 
Out[81]: 
['Long string 1 [sucess 50]', 
'long string 2 [apple 5 banana 20 orange 75]', 
'long string 3 [failure: 100]'] 

Как регулярное выражение работает:

([^\[]*\[[^\]]*\])(?: ?) 

Regular expression visualization

Debuggex Demo

Подробное пояснение по адресу: https://regex101.com/r/oS1oL8/1

+0

извините за то, что недостаточно ясны. длинная строка также может содержать [] и(). так что вход будет: «(условие (яблоко) [сбор 100] (в (номер_узла) [2110 3211 3299 2672 5087]) [чистый 50] (или (в (номер телефона) [3213335512 3113337843 2332224083 3221112625]) (в apt_size) [1030 2165]) (in (parcel_id) [3133 8314 8886])) [заряд 100]) «что я хочу:» (яблоко) [сбор 100] »« (в (street_number) [2110 3211 3299 2672 5087 ]) [clean 50] "" (или (in (phone_number) [3213335512 3113337843 2332224083 3221112625]) (в (apt_size) [1030 2165]) (in (parcel_id) [3133 8314 8886])) [плата 100] " –

+0

Я думаю, что всегда хочу разделить на []. Я не знаю, как это можно сделать в regex –

+0

@WeiXiao Пожалуйста, создайте новый вопрос с этими требованиями. –

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