-2

有没有正则表达式大师可以帮助我?

我有一个像{first|second|third}这样的单词列表,我只想要最后一个单词,在这种情况下是 {first|second| 第三个}。

任何人都可以帮助我吗?

编辑

反馈后,我正在添加更多信息。

例如,我有一个句子,例如“我要去法国 {today|tomorrow|next week}”。但我只想说“我下周要去法国”。

我试过(?<=\{).*?(?=\|.*?\})了,但这给了我|tomorrow|next week,我只想要next week没有垂直线。

PS它不一定要3个字,我只想要最后一个。

4

4 回答 4

2

您需要的正则表达式显然是:

((\w|\s)+)\}
于 2013-07-23T11:44:20.473 回答
0

正则表达式的python测试:

>>> import re
>>> test = """ds like {first|second|third}, and I want just t"""
>>> re.findall('\|([^\|]+)\}', test)
['third']
于 2013-07-23T11:24:39.813 回答
0

要通常替换{a|bc|def}def没有嵌套或其他复杂情况,请搜索正则表达式

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

并用第一个(也是唯一的)括号子组替换。在 Perl 中,这类似于

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

许多其他语言具有类似的语法,尽管它可能不那么紧凑。在 PHP 中,查找preg_replace.

表达式看起来很复杂,但实际上并非如此;我们寻找一个文字{后跟最长的字符串 not },只要它后面跟着一个文字和(子组)一个既不是也不|是的字符串,最后,在子组之后,一个文字。|}}

于 2013-07-23T11:54:39.180 回答
0

尝试这个

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

(您可以通过在浏览器的 JS 控制台中键入以下内容来轻松测试它)

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

甚至

"I am going on the {first|second|third}".replace(/\{.+?([^|]+?)\}/, "$1")
-> "I am going on the third"
于 2013-07-23T11:59:53.893 回答