Страница 1 из 2

Regex

Добавлено: 13 фев 2006, 17:38
AlexK
Подскажите плиз regex выражение.

Из строки D:\CTS_FAXES\420\Family Maintenance\
Надо вытащить (420) и (Family Maintenance)

Re: Regex

Добавлено: 13 фев 2006, 18:31
ajkj3em
regexp match'уют, "вытаскивать" им вообще говоря проблематично

Re: Regex

Добавлено: 13 фев 2006, 20:11
CdR
ajkj2em писал(а):regexp match'уют, "вытаскивать" им вообще говоря проблематично
Глубокомысленно...

D:\CTS_FAXES\420\Family Maintenance\

Код: Выделить всё

#!/usr/bin/perl
$_=<>;
/.*\\([^\\]*)\\([^\\]*)\\$/;
print "$1 $2";
Далее могут идти пачки вариаций на тему языков и вводимых строк, о которых в вопросе ни слова.

Re: Regex

Добавлено: 13 фев 2006, 20:49
ajkj3em
CdR писал(а):Далее могут идти пачки вариаций на тему языков и вводимых строк, о которых в вопросе ни слова.
о том и речь. regular expression is just that - an expression.
как и чем input токенизируется зависит от тулза или языка.

Re: Regex

Добавлено: 13 фев 2006, 21:29
CdR
ajkj2em писал(а):о том и речь. regular expression is just that - an expression.
как и чем input токенизируется зависит от тулза или языка.
Вот только не надо так к словам придираться. Цель и смысл вопроса более менее понятны. А то я тоже начну спрашивать о каких именно regexp речь идет.

PS: ушел пить водку с вареньем. :)

Re: Regex

Добавлено: 13 фев 2006, 21:35
ajkj3em
CdR писал(а):Вот только не надо так к словам придираться.
икзактли :)

Добавлено: 13 фев 2006, 23:05
AlexK
логично. подразумевается c# и его regexные классы....

данa строка формата:

string sourcePath = @"D:\CTS_FAXES\420\Family Maintenance\";

надо вытаскивать то что на месте "420" в одну стринг и "Family Maintenance" в другую.

string substring1 = ?
string substring1 = ?

ваш ход маэстры! :D

Добавлено: 14 фев 2006, 18:42
Picasso
AlexK писал(а):логично. подразумевается c# и его regexные классы....

данa строка формата:

string sourcePath = @"D:\CTS_FAXES\420\Family Maintenance";

надо вытаскивать то что на месте "420" в одну стринг и "Family Maintenance" в другую.

string substring1 = ?
string substring1 = ?

ваш ход маэстры! :D
"Остап играл в шахматы второй раз в жизни" :)

C# не знаю но нутром чую XPATH там должон быть каким-то боком, хотя бы как часть XSLT.
Юзай функцию tokenize, например что-то типа:

Код: Выделить всё

<xsl:variable name="subs" select="tokenize($sourcePath, '\')"/>
substring1 = <xsl:valule-of select="$subs[3]"/>
substring2 = <xsl:valule-of select="$subs[4]"/>

Добавлено: 14 фев 2006, 19:27
Stanislav
AlexK писал(а):логично. подразумевается c# и его regexные классы....
данa строка формата:
string sourcePath = @"D:\CTS_FAXES\420\Family Maintenance";
надо вытаскивать то что на месте "420" в одну стринг и "Family Maintenance" в другую.
ваш ход маэстры! :D
Ну так бы сразу и сказали! А то слова непонятные пишуть, какие-то закорючки в коде рисують.... :lol: а всего делов то:
string[] str = sourcePath.Split('\\');
string substring1 = str[str.Length-2];
string substring2 = str[str.Length-3];

Добавлено: 14 фев 2006, 19:50
CdR
Picasso писал(а):C# не знаю но нутром чую XPATH там должон быть каким-то боком, хотя бы как часть XSLT.
ШО? ОПЯТЬ? :)

Ну так бы сразу и сказали! А то слова непонятные пишуть, какие-то закорючки в коде рисують.... icon_lol.gif а всего делов то:
на самом деле все наверняка в следующей итерации упрется во что-нибудь типа строки "D:\CTS_FAXES\420\Family Maintenance\"
или "D:\CTS_FAXES\<куча всего>\420\\Family Maintenance\<еще много чего>"
IMHO: regexp в таких разборах полетов разумно использовать.

С# сам ни разу не нюхал, но первый же запрос в google подсказал пару примеров, типа такого
Так что сделать по образцу -- никаких проблем.
Ну разве что найти где этот C# водится в живом виде :)

Добавлено: 14 фев 2006, 20:07
Stanislav
CdR писал(а):...на самом деле все наверняка в следующей итерации упрется во что-нибудь типа строки "D:\CTS_FAXES\420\Family Maintenance\"
или "D:\CTS_FAXES\<куча всего>\420\\Family Maintenance\<еще много чего>"
Ну такие строки это вряд ли появятся - они ж не с потолка упали - это имена директорий.

Добавлено: 14 фев 2006, 21:04
AlexK
Не маэстры вы (кроме CDr)! :lol:

Во я как написал

Код: Выделить всё

Match m = Regex.Match(@"D:\CTS_FAXES\420\Family Maintenance\blah.pdf ", ".*\\\\([^\\\\]*)\\\\([^\\\\]*)\\\\[^\\\\]*$", RegexOptions.IgnoreCase);
if (!m.Success)
   throw new Exception("Unable to get office ID and folder name from the file path");

string officeID = m.Groups[1].Value;
string folderName = m.Groups[2].Value;
Ну а если сер'езно - всем спасибо! Форум это сила!

Добавлено: 14 фев 2006, 21:22
CdR
Stanislav писал(а):Ну такие строки это вряд ли появятся - они ж не с потолка упали - это имена директорий.
Ну, мало ли в результате чего они получатся могут. Мы то этого знать не можем, только предполагать.
Во я как написал
И шо? заработало? :)
Я точно не маэстр, уж в C# так вообще тока названиё слыхал.


PS: Кстати, мои предположения насчет стоки, таки частично оправдались:

Код: Выделить всё

D:\CTS_FAXES\420\Family Maintenance\blah.pdf

Добавлено: 15 фев 2006, 04:16
Picasso
CdR писал(а):
Picasso писал(а):C# не знаю но нутром чую XPATH там должон быть каким-то боком, хотя бы как часть XSLT.
ШО? ОПЯТЬ? :)
А шо, уже было?

Добавлено: 15 фев 2006, 07:54
Stanislav
CdR писал(а):...PS: Кстати, мои предположения насчет стоки, таки частично оправдались:

Код: Выделить всё

D:\CTS_FAXES\420\Family Maintenance\blah.pdf
Ну так, кстати, то что я написал - абсолютно работоспособно для этого случая! Результат будет тот же самый...