LINUX.ORG.RU

Проблема с регекспами


0

0

Такая проблема: как в перловом регекспе (питоновский модуль re) написать выражение, удовлетворяющее строке, состоящей только из букв и пробелов? Не могу найти решения...

★★★★★

'/[a-zа-я ]+/i'

\w буквы и символы подчёркивания включает. \s пробелы, переводы строки и табуляцию.

Wizard_ ★★★★★
()
Ответ на: комментарий от wfrr

не пройдёт, сюда подходят ещё и цифры :(

Binary ★★★★★
() автор топика
Ответ на: комментарий от Binary

в перл-совместимых регексах нет символа, обозначающего буквы "любого алфавита". "Буквы" и пробелы(только пробелы?) латиницы:
(?i)[a-z ]+
Если надо другие алфавиты, соответственно пихаешь в регекс диапазоны
(?i)[a-zА-Яа-я ]+

guest-3484-2009
()
Ответ на: комментарий от Binary

Тыб описывал задачу сразу и четко, а то щас еще окажется что режексп должен работать только по субботам и выдавать исключение при слове "сало".

wfrr ★★☆
()
Ответ на: комментарий от wfrr

а разве буквы не кириллицы и не латиницы не являются буквами? какие тут претензии к формулировке могут быть?

Binary ★★★★★
() автор топика
Ответ на: комментарий от guest-3484-2009

для grep работает, для python - нет...

Binary ★★★★★
() автор топика
Ответ на: комментарий от guest-3484-2009

зато \w прекрасно обозначает "буквы любого алфавита, цифры, символ подчёркивания". с оговоркой, что есть флаг UNICODE, конечно. А Вы серьёзно предлагаете все диапазоны всех алфавитов запихать в регексп?

Binary ★★★★★
() автор топика
Ответ на: комментарий от wfrr

действительно там работает, а вот в python нет :(

>>> print re.match(r'(?u)^[\w&&\D]$',u'1') <_sre.SRE_Match object at 0x7f335d83d098>

видать им не под силу

Binary ★★★★★
() автор топика
Ответ на: комментарий от Binary

А в питоне может синтаксис другой, найдите мануал хотябы, для явы все просто и документированно

wfrr ★★☆
()
Ответ на: комментарий от ip1981

WTF?

Предложи работающее решение, делов-то.

Wizard_ ★★★★★
()
Ответ на: комментарий от Binary

Блин питон оказывается даже нормальных режекспов не умеет 8(

Вот способ через жопу

>>> re.match(r'^(\w(?!\d+))+$','sadss').group()
'sadss'
>>> re.match(r'^(\w(?!\d+))+$','sad3ss').group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

wfrr ★★☆
()
Ответ на: комментарий от wfrr

и правда через жопу :( ну и на том спасибо

Binary ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Да хотябы таже жаба. Или например в пыхе тиснули либы с перла, там уж нормальнее некуда, правда обертка (пых) дерьмо еще то.

wfrr ★★☆
()
Ответ на: комментарий от true_admin

>\w матчит цифры и в перле.

\w цЫфры должен матчить везде, однако во вменяемых реализациях есть способы сделать исключения.

>в пыхе libpcre который к перлу отношения не имеет.


Ключевая фраза "Perl Compatible Regular Expressions", то бишь севместимые, про то что тиснули я неверно выразился, скорее тиснули синаксис ("с некоторыми исключениями"), а не стали делать убогую пародию как в питоне.

Однако сделать исключение мабуть и в перле нельзя, зато можно юзать [:alpha:]

wfrr ★★☆
()
Ответ на: комментарий от wfrr

ясно, тут дело не в регекспах. А я уж хотел патчик налабать.

true_admin ★★★★★
()
Ответ на: комментарий от Hjorn

работает :) спасибо, так мозг вывернуть у меня не получилось :)

Binary ★★★★★
() автор топика
Ответ на: комментарий от Binary

Да никакой, просто мне питон ненравится, причем не столько в силу синтаксиса, сколько в силу его чуждой мне философии построение api и привычки постоянно чтото ломать и строить новое. Тут еще эти оригинальные регулярки.

wfrr ★★☆
()
Ответ на: комментарий от wfrr

мнение имеет право на жизнь :)

Binary ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.