2015-05-19 4 views
0

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

Я хочу, чтобы удалить содержимое «на узле» и остальное, пока не дойдете до конца, если слово после того, как оно находится в конце предложения

eg

PAA-NID30054-30102V2001P7 PAA_PL_ALERT очищается на узле сайт-532332/6736356.

и

PAC-NID43453-435346547 PAA_PL_ALERT очищается от узла SiteGround.

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

on node.* 

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

eg

VNOC-IPX DRA сигнализации на узле повторно dsad-а - DEASWQ01_01 - Подключение Недоступен.

Мысль использования:

on node.*- 

Однако, это не будет ясно после того, как слово «на узле» для первого примера.

Советуете ли вы использовать начальную и конечную функции, чтобы решить, соответствовало ли совпадение в конце строки или нет? т. е. создать предложение if и проверить, подходит ли совпадение, в противном случае использовать -

+0

Вы считаете, что не используете регулярное выражение? – Ross

+0

если он подходит, почему бы и нет – user2566898

+0

Я предлагаю использовать 'str.split()' then. Затем вы можете применить к ним различные логики. Это просто, читает и кодирует лучше, и подходит для этого сценария немного лучше, чем регулярное выражение IMO. – Ross

ответ

0

Вы можете использовать маркер конца строки в своем регулярном выражении. Может быть, попробовать это:

on node [^\s]*$ 
     | ||__ End of line 
     | |___ Any amount 
     |_______ Not a space character (space, tab, newline) 
+0

Спасибо за ваш ответ, но он не работает. – user2566898

+0

Убедитесь, что вы получаете пространство после 'on node'. Если не существует регулярного выражения Python, оно должно работать, но я не могу проверить его прямо сейчас. Может быть, '[^ \ s]' не работает в Python? Вы можете использовать '\ S' для его замены. – ozdrgnaDiies

0

Я хочу, чтобы удалить содержимое «на узле» и остальное, пока не дойдете до конца, если слово после того, как он в конце предложения

Похоже, вы хотите удалить "on node" и следующую работу после.

Попробуйте следующее:

r'on node \S+' 

Конечно, это будет иметь проблемы с

VNOC-IPX DRA Alarm on node re-dsad-a - DEASWQ01_01 - Connection Unavailable. 

Поскольку это несколько слов после того, как "на узле". В этом случае ваши правила слишком произвольны из того, что вы хотите удалить и хотите, что хотите сохранить.

0

Если вы были открыты для других способов (не используя регулярное выражение), то возможное наивное решение могло бы использовать str.split().

В целом, это будет выглядеть примерно так;

parts = line.split("on node") # you now have some parts to look at 
# if 'on node' was found this will be > 1 
if len(parts) > 1: 
    # additional logic to assess the second part of the string 
    if parts[1].lower().find("connection unavailable") >= 0: 
    # do something 
    # do something more 
+0

'' если части [1] .lower() '' не позволяют найти «Connection Unavailable» :) –

+0

@YannisP. - Благодаря. Это должно быть «соединение недоступно», и я изменил это сейчас. Это для нечувствительного к регистру соответствия. фактический 'find()> = 0' должен быть правильным, а остальная часть деталей зависит от исполнителя. – Ross

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