import re
text = '12 ГКК-5-282(219), (что то тут есть)'
well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?'
wells = list(re.finditer(well_pattern, text, re.MULTILINE))
for m in wells:
print(text[m.start():m.end()])
Почему выводит "ГКК-5-282" ?
Должен вроде "ГКК-5-282(219)".
Долго мучал дипсик и чатгпт, результата ноль.
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
_>import re
_>text = '12 ГКК-5-282(219), (что то тут есть)'
_>well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?'
_>wells = list(re.finditer(well_pattern, text, re.MULTILINE))
_>for m in wells:
_> print(text[m.start():m.end()])
_>Почему выводит "ГКК-5-282" ? _>Должен вроде "ГКК-5-282(219)".
_>Долго мучал дипсик и чатгпт, результата ноль.
А что делает код? По идее (\(.+\))*? соответствует (219), (что то тут есть).
_>import re
_>text = '12 ГКК-5-282(219), (что то тут есть)'
_>well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?'
_>wells = list(re.finditer(well_pattern, text, re.MULTILINE))
_>for m in wells:
_> print(text[m.start():m.end()])
_>Почему выводит "ГКК-5-282" ? _>Должен вроде "ГКК-5-282(219)".
_>Долго мучал дипсик и чатгпт, результата ноль.
Gemini согласен что должно быть "ГКК-5-282(219)", если тут убрать ? на конце, то все ок
Здравствуйте, s_aa, Вы писали:
Q>>Gemini согласен что должно быть "ГКК-5-282(219)", если тут убрать ? на конце, то все ок
_>Если убрать ?, то результат "ZZZ-5-282(219)(345)". А надо "ZZZ-5-282(219)".
Здравствуйте, s_aa, Вы писали:
_>Вот строки _>"ZZZ-5-282(219)(345)" _>"ZZZ-5-282"
_>Одной регуляркой в них должны искаться _>ZZZ-5-282(219) _>ZZZ-5-282
Здравствуйте, s_aa, Вы писали:
_>well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?' _>Долго мучал дипсик и чатгпт, результата ноль.
Все очень просто — вопросительный знак ? после директивы кардинальности * делает директиву кардинальности максимально ленивой. То есть, если она может захватывать 0 экземпляров, а * может захватывать от 0 до n экземпляров, то она не будет ничего захватывать потому что она ленивая из-за модификатора ? который вы ей в конце приписали.
Вам нужно вот это скорее всего:
well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))?'
тут символ ? выступает в роли директивы кардинальности и захватывает 0 или 1 экземпляр (если он есть).
П.С. Про себя улыбаюсь что вы это спрашиваете у нейронок.