2013-07-23 2 views
-2

Есть ли какие-нибудь мастера регулярных выражений, которые могут мне помочь?regex взять строку C из {A | B | C}

У меня есть список слов вроде {first | second | third}, и я хочу только последнее слово, в данном случае {first | second | третий}.

Может ли кто-нибудь мне помочь?

Edit:

После обратной связи я добавляю больше информации.

У меня есть предложение, например «Я еду в Францию ​​(сегодня | завтра | на следующей неделе)», например. Но я хочу только «Я еду во Францию ​​на следующей неделе».

Я пробовал (?<=\{).*?(?=\|.*?\}), но это дает мне |tomorrow|next week, я просто хочу next week без вертикальных линий.

PS это не обязательно должно быть 3 слова, я просто хочу последнего независимо.

+1

-1: Этот вопрос делает не показывают никаких исследований. Что вы пробовали? –

+0

использование split функция. –

+2

Прочитайте это и усовершенствуйте свой вопрос: [Джон Скетс: Написание идеального вопроса] (http: // tinyurl.com/so-hints) и [Matt Gemmells: Что вы пробовали?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) – stema

ответ

2

Регулярное выражение вам нужно, это очевидно:

((\w|\s)+)\} 
+0

Ты гений, спасибо. – happygilmore

+0

@happygilmore - '[\ s \ w] + (? = \})' Должен дать вам тот же результат без необходимости извлекать группу. – JDB

+0

@ Cyborgx37 Конечно. Тем не менее, я выступаю за то, чтобы придумать самое простое регулярное выражение, а затем уточнить его. Например, заставьте внутреннюю группу не захватывать или заменять класс символов, как вы защищаете. Независимо от того, нужно ли искать утверждение, если можно обойтись без него, это вопрос вкуса - я, со своей стороны, избегаю его, если он абсолютно не нужен. – Ingo

0

тест питон регулярное выражение:

>>> import re 
>>> test = """ds like {first|second|third}, and I want just t""" 
>>> re.findall('\|([^\|]+)\}', test) 
['third'] 
0

Чтобы вообще заменить {a|bc|def} с def, без вложенности или других осложнений, поиск регулярного выражения

\{[}]+\|([^|}]+)\} 

и заменить на первая (и только) подгруппа в скобках. В Perl это было бы что-то вроде

s/\{[}]+\|([^|}]+)\}/$1/g; 

Многие другие языки имеют аналогичный синтаксис, хотя он может быть менее компактным. В PHP найдите preg_replace.

Выражение выглядит сложным, но на самом деле это не так; мы ищем литерал {, за которым следует самая длинная строка символов, которые не являются }, если за ним следует буква | и (подгруппа) строка символов, которые не являются ни |, ни }, и, наконец, после подгруппы, литерал }.

0

Попробуйте

/\{.+?([^|]+?)\}/ 

(вы можете легко проверить это, введя в JS консоли вашего браузера)

"{first|second|third}".replace(/\{.+?([^|]+?)\}/, "$1") 

или даже

"I am going on the {first|second|third}".replace(/\{.+?([^|]+?)\}/, "$1") 
-> "I am going on the third" 
Смежные вопросы