powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Кто на регулярных выражениях собаку съел? Подскажите...
25 сообщений из 85, страница 1 из 4
Кто на регулярных выражениях собаку съел? Подскажите...
    #34922486
Automater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо выцепить из текста все случаи (подстроки) отвечающие следующим критериям:
1. Подстрока начинается со слова AAA
2. Подстрока заканчивается словом BBB
3. Подстрока не содержит слова ZZZ.

Вот это вот "не содержит" никак не могу спрограмить Есть возможность проверять что не содержит какие-то символы: [^z], но нужно чтобы не было конкретного слова.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34922729
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Python 2.5

(?!...)
Matches if ... doesn't match next. This is a negative lookahead assertion. For example, Isaac (?!Asimov) will match 'Isaac ' only if it's not followed by 'Asimov'.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34922743
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотря какой язык используеш... У нас например есть несколько вариантов для решения п.3
Код: plaintext
1.
if $f(str,"ZZZ")= 0  w !,"Не содержится"
if str'["ZZZ" w !,"Не содержится"
и это только "основные" варианты...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34922982
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AutomaterНадо выцепить из текста все случаи (подстроки) отвечающие следующим критериям:
1. Подстрока начинается со слова AAA
2. Подстрока заканчивается словом BBB
3. Подстрока не содержит слова ZZZ.

Вот это вот "не содержит" никак не могу спрограмить Есть возможность проверять что не содержит какие-то символы: [^z], но нужно чтобы не было конкретного слова.

Ну, что-то типа так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
using System;
using System.IO;
using System.Text.RegularExpressions;

public class Script {
	public static void Main (string[] args) {
		string text = @"qwerty-trewq-qwerty-werty-trewq-erty-trewq-rty";
		Regex rx = new Regex(@"-(?!tr)\w*ty"); // начинаются на "-" (минус), заканчиваются на "ty", не содержат "tr"...
     // Find matches.
     MatchCollection matches = rx.Matches(text);

     // Report the number of matches found.
     Console.WriteLine("{0} matches found.", matches.Count);

     // Report on each match.
     foreach (Match match in matches)
     {
         string word = match.Groups[0].Value;
         int index = match.Index;
         Console.WriteLine("{0} repeated at position {1}", word, index);   
     }
	}
}
//////////////// Output:

4 matches found.
-qwerty repeated at position 12
-werty repeated at position 19
-erty repeated at position 31
-rty repeated at position 42
З.Ы. курить надо т.н. (?! ) Grouping construct...
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34922990
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусть Automater скажет, на каком языке он пишет эти выражения, а то мы тут насоветуем...

--

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34923002
Automater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C#.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34923023
Automater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green2пусть Automater скажет, на каком языке он пишет эти выражения, а то мы тут насоветуем...хреновый!
С# - айтов в смысле регулярных...

qu-quЗ.Ы. курить надо т.н. (?! ) Grouping construct...Да допёр я до этого...
Но тут "начинается с -", частный случай. А если просто в строке не должно быть подстроки?

Код: plaintext
new Regex(@"[\S\s](?!tr)\w*ty");
Так что-ли? Пробовал я такой вариант, он один символ возращает.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34923046
Automater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AutomaterС# - айтов в смысле регулярных..."Ацтой" там слово.

Кароче пока мучуюсь вот так:
Expression-Based Patterns - example that matches words within a string and capitalizes them:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
static string CapText(Match m)
    {
// get the matched string
    string x = m.ToString();	
// if the first char is lower case
    if (char.IsLower(x[ 0 ]))	
// capitalize it
      return char.ToUpper(x[ 0 ]) + x.Substring( 1 , x.Length- 1 ); 
    return x;
    }
    
  static void Main()
    {
    string text = "the quick red fox jumped over the 
      lazy brown dog.";
    System.Console.WriteLine("text=[" + text + "]");
    string pattern = @"\w+";
    string result = Regex.Replace(text, pattern,
		  new MatchEvaluator(Test.CapText));
    System.Console.WriteLine("result=[" + result + "]");
    }
А там, в этой маленькой статической процедуре, уже проверяю на наличие строки.

Но это ж решение "через ж."

И вообще, после нескольких полномасштабных серфов по этому вопросу у меня создалось впечатление что в C# нельзя проверить отсутствие последовательности символов.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34923864
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Automaterу меня создалось впечатление что в C# нельзя проверить отсутствие последовательности символов.
Отрицания еще никто не отменял Т.е. ты проверяеш "наличие", потом добавляеш к этому условию отрицание и вуаля!
Или у "насильников" такое не катит?
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34923880
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-quНу, что-то типа так:
Код: plaintext
1.
2.
3.
...
Regex rx = new Regex(@"-(?!tr)\w*ty");
...


наверное все таки имелось в виду:

(?! \w* tr)\w*ty

тестовый пример подобран неудачно и решение действительно частное, но не по той причине, что была озвучена. Решение первоначальной задачи:

(\bAAA\b(?!(?!.*?\bBBB\b).*?\bZZZ\b).*?\bBBB\b)

если имелись в виду не слова, а подстроки, \b убрать
но я бы делал вот так:

Код: plaintext
1.
2.
3.
4.
if (/\bAAA\b.*?(\bZZZ\b|\bBBB\b)/) {
   if ($ 1  eq 'BBB') {
      ...
   }
}

и не лохматил бабушку
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34924096
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) qu-quНу, что-то типа так:
Код: plaintext
1.
2.
3.
...
Regex rx = new Regex(@"-(?!tr)\w*ty");
...


наверное все таки имелось в виду:

(?! \w* tr)\w*ty
...
Да, вы правы, именно это и имелось ввиду, прошу прощения у топиккастера за некоторую небрежность в тестовом примере, однако ж, я честно в З.Ы. сказал, что "курить" надо именно Grouping construct, а не ждать от посетителей форума готовых решений... (у отвечающего, банально, может не хватать времени, чтобы проверять досконально основную идею ответа).
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34927383
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
(\bAAA\b(?!(?!.*?\bBBB\b).*?\bZZZ\b).*?\bBBB\b)


мда. поторопился
это тоже не работает. Проблема в том, что при неуспешном сопоставлении поиск не останавливается, а продолжается дальше :(

Вот это теоретически должно работать:

Код: plaintext
1.
/\bAAA\b(.*?)\bBBB\b(?(?{ $ 1  =~ \/\bZZZ\b\/ })\ 0 )/

Идея думаю понятна :)
К сожалению, у меня оно валит Perl

P.S. В моей самописной машинке регулярных выражений эта задачка решается элементарно, так как я добавил в квантификатор возможность задания стоп-выражения
P.P.S. Замечание относительно лохматой бабушки остается в силе, такого рода задачи проще решаются вне стандартного регулярного выражения
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34927963
Automater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)К сожалению, у меня оно валит Perl нужен с#
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34927989
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Automater Gluk (Kazan)К сожалению, у меня оно валит Perl нужен с#

внимательно читай про бабушку, остальное игра ума
эта задачка не для регекспов
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34928022
Automater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) Automater Gluk (Kazan)К сожалению, у меня оно валит Perl нужен с#

внимательно читай про бабушку, остальное игра ума
эта задачка не для регексповWho is missis Babushka?

Я много серфил. Создалось впечатление что нету никаких отрицаний целых подстрок .
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34928115
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Код: plaintext
1.
2.
3.
4.
if (/\bAAA\b.*?(\bZZZ\b|\bBBB\b)/) {
   if ($ 1  eq 'BBB') {
      ...
   }
}

и не лохматил бабушку
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34928470
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AutomaterСоздалось впечатление что нету никаких отрицаний целых подстрок .
У нас в Cache проверка по шаблону возвращает:
0 - ложь
1 - истина
если подставить отрицание к выражению "содержит" - получим "не содержит" Хотя в этом не нужны регулярные выражения... У нас есть такая бинарная операция "содержит"
Код: plaintext
1.
2.
3.
4.
if str["ZZZ" {
   w !,"Содержит"
} else {
   w !,"Не содержит"
}
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34928587
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa AutomaterСоздалось впечатление что нету никаких отрицаний целых подстрок .
У нас в Cache проверка по шаблону возвращает:
0 - ложь
1 - истина
если подставить отрицание к выражению "содержит" - получим "не содержит" Хотя в этом не нужны регулярные выражения... У нас есть такая бинарная операция "содержит"
Код: plaintext
1.
2.
3.
4.
if str["ZZZ" {
   w !,"Содержит"
} else {
   w !,"Не содержит"
}


Я конечно понимаю, что у кашистов принято называть регулярными выражениями все что угодно кроме регулярных выражений, но автор явно сказал, что его интересует C#
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34928700
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про отрицание писал я, вот и отписался...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34929291
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AutomaterЯ много серфил. Создалось впечатление что нету никаких отрицаний целых подстрок .Вообще-то отрицания есть. Только с ними работать сложно :)
Если на время отвлечешься от C# и почитаешь perlre, там есть глава под названием Backtracking. И там с примерами объясняется как работает движок регулярных выражений и почему AAA.*(?!ZZZ) работает не так как ожидалось.
А вообще, отрицание можно сделать двумя способами. Через (?!word) или (word){0}.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34929310
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если так? Не проверял.
AAA(?:[^BZ]*(?!ZZZ)Z*)+BBB
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34931190
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoесли так? Не проверял.
AAA(?:[^BZ]*(?!ZZZ)Z*)+BBB

частное решение [^BZ]
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34931194
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlили (word){0}.

Гмм. всегда считал, что сие совпадет с пустой строкой, стало быть найдется в любой строке
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34931387
Tellur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я делал так
Код: plaintext
1.
/([^v]|v(?!asia))+/
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34933461
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) White Owlили (word){0}.

Гмм. всегда считал, что сие совпадет с пустой строкой, стало быть найдется в любой строкеОшибался :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#!/usr/bin/perl
$a = "wqeAAAZZZZBBBasdffg";
$b = "wqeAAAZZBBBasdffg";
$c = "wqeAAABBBasdffg";

$pattern = "AAA(ZZZ){0}BBB";

print "\$a - Yes\n" if ($a =~ $pattern);
print "\$b - Yes\n" if ($b =~ $pattern);
print "\$c - Yes\n" if ($c =~ $pattern);
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 1 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Кто на регулярных выражениях собаку съел? Подскажите...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]