有没有可以帮助我的正则表达式大师?
我有一个像 {first | second | third} 这样的单词列表,我想要的是最后一个单词,在这种情况下{first | second | third }
任何人都可以帮助我吗?
修改:
反馈后,我正在添加更多信息。
我有一句话,例如“我要去法国{今天|明天|下周}”。但我只想“我下周去法国 ”。
我试过了(?<=\{).*?(?=\|.*?\})
,但这给了我|tomorrow|next week
,我只想next week
没有垂直线。
PS 它不一定要3个字,我只想要最后一个。
答案 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"