正则表达式从{A | B | C}取字符串C

时间:2013-07-23 11:19:12

标签: regex

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

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

任何人都可以帮助我吗?

修改

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

我有一句话,例如“我要去法国{今天|明天|下周}”。但我只想“我下周去法国 ”。

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

正则表达式的python测试:

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

答案 2 :(得分:0)

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

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

并用第一个(也是唯一的)带括号的子组替换。在Perl中,这就像

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

许多其他语言的语法相似,但可能不那么紧凑。在PHP中,查找preg_replace

这个表达看起来很复杂,但并不是真的;我们寻找一个文字{,然后是最长的字符串,而不是},只要它后跟一个文字|和(子组)一串字符,它们是既不是|也不是},最后是子群之后的文字}

答案 3 :(得分:0)

试试这个

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

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

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

甚至

"I am going on the {first|second|third}".replace(/\{.+?([^|]+?)\}/, "$1")
-> "I am going on the third"