Найти что-то между скобками - PullRequest
0 голосов
/ 15 февраля 2019

Я получил такую ​​строку:

LD(_030S.F.IN)OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0)

Я хочу посмотреть только на OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0), но OR также может быть LD._080T_SAF_OUT может отличаться, будучи всегда буквенно-цифровым, иногда с косой чертой.COIL(xxSF[4].Flt[120].0), должен быть всегда в формате COIL(xxSF["digits"].Flt["digits"]."digits")

Я пытаюсь использовать библиотеку Python 2.7.

m = re.search('\OR|\LD'+'\('+'.+'+'\)'+'+'\COIL+'\('+'\xxSF+'\['+'\d+'+'\].'+ Flt\['+'\d+'+'\]'+'\.'+'\d+', Text)

Мой вывод:

OR(abc_TEST_X)LD(xxSF[16].Flt[0].22
OR
LD(TEST_X_dsfa)OR(WASS_READY)COIL(xxSF[16].Flt[11].10

Первый является правильным, который я получаю, я хочу отбросить второй и третий.

Я думаю, что проблема здесь:

'\('+'.+'+'\)' 

Из-за того, что я просто хочу найти что-то буквенно-цифровое и, возможно, с символами между первой парой парентеза, и я не фильтрую эту ситуацию.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Спасибо, я снимаю все, что хочу.Просто что-то еще для фильтрации.Посмотрите на некоторые выходы:

1002 * OR (_1B21_A53021_2_En) ИЛИ (_1_A21_Z53021_2) COIL (xxSF [9] .Flt [15] +0,3); 1004 * LD (_1B21_A53021_2_En) LD (_1_A21_Z53021_2)COIL (xxSF [9] .Flt [15] .3);

Я хочу захватить только последний "LD" или "ИЛИ" следующим образом:

ИЛИ (_1_A21_Z53021_2) COIL(xxSF [9] .Flt [15] .3);

LD (_1_A21_Z53021_2) COIL (xxSF [9] .Flt [15] .3);

0 голосов
/ 15 февраля 2019

Вы должны сгруппировать чередования, такие как (?:LD|OR), и для сопоставления любых символов, отличных от ( и ), вы можете использовать [^()]* вместо .+ (.+ соответствует любым символам, насколько это возможно,следовательно, он соответствует круглым скобкам).

Вот демо Python :

import re
Text = 'LD(_030S.F.IN)OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0)'
m = re.search(r'(?:OR|LD)\([^()]*\)COIL\(xxSF\[\d+]\.Flt\[\d+]\.\d+', Text)
if m:
    print(m.group()) # => OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0

Детали шаблона

  • (?:OR|LD) - сопоставление группы без захвата OR или LD
  • \( - ( char
  • [^()]* - сопоставление отрицательного класса символов 0+символы кроме ( и )
  • \)COIL\(xxSF\[ - )COIL(xxSF[ подстрока
  • \d+ - 1+ цифр
  • ]\.Flt\[ - ].Flt[подстрока
  • \d+]\.\d+ - 1+ цифр, ]. подстрока и 1+ цифр

См. демонстрационную версию regex .

СОВЕТ Добавьте \b перед (?:OR|LD), чтобы сопоставить их как целые слова (не как часть NOR и NLD).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...