Помогите с регуляркой
От: s_aa Россия  
Дата: 13.05.25 05:56
Оценка:
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)".

Долго мучал дипсик и чатгпт, результата ноль.
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Отредактировано 13.05.2025 7:23 s_aa . Предыдущая версия .
Re: Помогите с регуляркой
От: Qulac Россия  
Дата: 13.05.25 07:41
Оценка:
Здравствуйте, s_aa, Вы писали:


_>
_>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), (что то тут есть).
Программа – это мысли спрессованные в код
Re[2]: Помогите с регуляркой
От: s_aa Россия  
Дата: 13.05.25 07:46
Оценка:
Q>А что делает код? По идее (\(.+\))*? соответствует (219), (что то тут есть).

Вот ссылка на пример (regex101.com)
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re: Помогите с регуляркой
От: Maniacal Россия  
Дата: 13.05.25 08:08
Оценка:
Здравствуйте, s_aa, Вы писали:

_>text = '12 ГКК-5-282(219), (что то тут есть)'

_>well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?'

_>Почему выводит "ГКК-5-282" ?

_>Должен вроде "ГКК-5-282(219)".

_>Долго мучал дипсик и чатгпт, результата ноль.


Что-то в скобках это (\([^)]*\))

Что найти-то хотел?

ГКК[\-\dА-Я]+\([^)]*\)
ГКК[\-\dА-Я]+(\([^)]*\))*
ГКК[\-\dА-Я]+((\([^)]*\))*)?
(ГКК[\-\dА-Я]+(\([^)]*\))*)?
Re: Помогите с регуляркой
От: Qulac Россия  
Дата: 13.05.25 08:09
Оценка:
Здравствуйте, s_aa, Вы писали:


_>
_>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)", если тут убрать ? на конце, то все ок
Программа – это мысли спрессованные в код
Re[2]: Помогите с регуляркой
От: s_aa Россия  
Дата: 13.05.25 08:14
Оценка:
Q>Gemini согласен что должно быть "ГКК-5-282(219)", если тут убрать ? на конце, то все ок

Если убрать ?, то результат "ZZZ-5-282(219)(345)". А надо "ZZZ-5-282(219)".
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re[3]: Помогите с регуляркой
От: Qulac Россия  
Дата: 13.05.25 08:16
Оценка:
Здравствуйте, s_aa, Вы писали:

Q>>Gemini согласен что должно быть "ГКК-5-282(219)", если тут убрать ? на конце, то все ок


_>Если убрать ?, то результат "ZZZ-5-282(219)(345)". А надо "ZZZ-5-282(219)".


Указать количество в регексе.
Программа – это мысли спрессованные в код
Re[2]: Помогите с регуляркой
От: s_aa Россия  
Дата: 13.05.25 08:56
Оценка:
M>Что найти-то хотел?

M>ГКК[\-\dА-Я]+\([^)]*\)

M>ГКК[\-\dА-Я]+(\([^)]*\))*
M>ГКК[\-\dА-Я]+((\([^)]*\))*)?
M>(ГКК[\-\dА-Я]+(\([^)]*\))*)?

Что-то не помогло. Нужно именно первое вхождение скобок если они есть.
Вот строки
"ZZZ-5-282(219)(345)"
"ZZZ-5-282"

Одной регуляркой в них должны искаться
ZZZ-5-282(219)
ZZZ-5-282
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re[4]: Помогите с регуляркой
От: s_aa Россия  
Дата: 13.05.25 09:00
Оценка:
_>>Если убрать ?, то результат "ZZZ-5-282(219)(345)". А надо "ZZZ-5-282(219)".

Q>Указать количество в регексе.


Все не то. Если вообще скобок нет тоже должно срабатывать
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re[3]: Помогите с регуляркой
От: Maniacal Россия  
Дата: 13.05.25 09:24
Оценка:
Здравствуйте, s_aa, Вы писали:

_>Вот строки

_>"ZZZ-5-282(219)(345)"
_>"ZZZ-5-282"

_>Одной регуляркой в них должны искаться

_>ZZZ-5-282(219)
_>ZZZ-5-282

Тогда так, может?
ZZZ[\-\dА-Я]+((\([^)]*\))|)
Re[3]: Помогите с регуляркой
От: karbofos42 Россия  
Дата: 13.05.25 09:41
Оценка:
Здравствуйте, s_aa, Вы писали:

_>Если убрать ?, то результат "ZZZ-5-282(219)(345)". А надо "ZZZ-5-282(219)".


А если
ZZZ(?:[\-\d])+(?:\(.*?\))?
Re[2]: Помогите с регуляркой
От: s_aa Россия  
Дата: 13.05.25 10:49
Оценка:
M>Что-то в скобках это (\([^)]*\))

Разобрался. Помогло {0,1}
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re: Помогите с регуляркой
От: Aquilaware  
Дата: 13.05.25 12:41
Оценка: 5 (1)
Здравствуйте, s_aa, Вы писали:

_>well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?'

_>Долго мучал дипсик и чатгпт, результата ноль.

Все очень просто — вопросительный знак ? после директивы кардинальности * делает директиву кардинальности максимально ленивой. То есть, если она может захватывать 0 экземпляров, а * может захватывать от 0 до n экземпляров, то она не будет ничего захватывать потому что она ленивая из-за модификатора ? который вы ей в конце приписали.

Вам нужно вот это скорее всего:

well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))?'

тут символ ? выступает в роли директивы кардинальности и захватывает 0 или 1 экземпляр (если он есть).

П.С. Про себя улыбаюсь что вы это спрашиваете у нейронок.
Re: Помогите с регуляркой
От: DiPaolo Россия  
Дата: 13.05.25 13:35
Оценка:
_>[python]
_>import re

_>text = '12 ГКК-5-282(219), (что то тут есть)'

_>well_pattern = r'ГКК[\-\dА-Я]+(\(.+\))*?'
_>wells = list(re.finditer(well_pattern, text, re.MULTILINE))

Вопросительный знак лишний. Ну если я правильно понял, что ты хочешь получить.
Патриот здравого смысла
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.