![](/img/trans.png)
[英]Regular Expression to extract strings between angle brackets with exactly one @ char in between
[英]Regex to find or extract strings between the "<>" angle brackets
在以下字符串中,
Jason <jason@bigcreative.com>
如何提取尖括号内的部分?
我试过<\w>
但没有用。
想法?
如果有所不同,我在 PHP 中使用preg_match()
。
user502515 已经给出了你想要的正则表达式。
我想补充一下为什么您的正则表达式<\w>
不起作用:
\w
是字符类[a-zA-Z0-9_]
,匹配该类中的任何一个字符。 要匹配更多字符,您需要使用量词:
+
一个或多个和*
零个或多个由于您要提取与模式匹配的字符串,因此需要将模式括在括号(..)
中,以便捕获它。
现在您最初的任务是提取<..>
之间的字符串,正则表达式<(\w+)>
将无法完成这项工作,因为 char 类\w
不包含@
。
要匹配任何内容,您可以使用正则表达式.*
匹配任意字符串(无换行符)。
所以正则表达式<(.*)>
匹配并捕获尖括号之间的任何字符串。
匹配是贪婪的,所以如果输入字符串是foo<foo@foo.com>, bar<bar.com>
你将提取foo@foo.com>, bar<bar.com
。 要解决此问题,您可以通过添加一个?
在.*
的末尾给我们正确的正则表达式<(.*?)>
然后使用<(.*?)>
作为正则表达式。
要在<
char 和下一个最接近的>
之间进行匹配,中间没有<
和>
(注意<.*?>
匹配<..<...>
之类的字符串),您可以使用
<([^<>]*)>
请参阅正则表达式演示。
正则表达式详细信息:
<
- 一个<
字符([^<>]*)
- 第 1 组: <
和>
以外的任何零个或多个字符>
- 一个>
字符。代码示例
var res = Regex.Matches(text, @"<([^<>]*)>").Cast<Match>().Select(x => x.Groups[1].Value).ToList();
const matches = [...Array.from(text.matchAll(/<([^<>]*)>/g), x => x[1])]
$res = preg_match_all('~<([^<>]*)>~', $text, $matches)? $matches[1]: "";
$res = preg_match_all('~<([^<>]*)>~', $text, $matches)? $matches[1]: "";
res = re.findall(r'<([^<>]*)>', text)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.