我在Visual Studio 2017中使用C#。我在字符串下面
inputvalue = "
OrderId:009
Email:Ardi1234@yahoo.com
ProductId:X206"
以下代码应使用电子邮件地址
var email = Regex.Match(input: inputvalue,
pattern: @"Email\:\ (.+)$",
options: RegexOptions.Multiline).Groups[1].Value;
我只想获取电子邮件地址。但结果是一个空字符串。我该怎么办?
答案 0 :(得分:1)
也许有点设计过度,但是如果有不希望的空格,它将提取电子邮件地址:
(?is)\bEmail:\s*([^@]+@[^.]+\.[a-z0-9]{2,6}(?:\.[a-z0-9]{2,6})?)$
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string pattern = @"(?is)\bEmail:\s*([^@]+@[^.]+\.[a-z0-9]{2,6}(?:\.[a-z0-9]{2,6})?)$";
string input = @"OrderId:009
Email:Ardi1234@yahoo.com
ProductId:X206
OrderId:009
Email: Ardi1234@yahoo.co.uk
ProductId:X206
OrderId:009
EMAIL: Ardi1234@yahoo.co.uk
ProductId:X206";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式:
答案 1 :(得分:0)
以下似乎有效:
var inputvalue = @"
OrderId:009
Email:Ardi1234@yahoo.com
ProductId:X206";
var email = Regex.Match(input: inputvalue,
pattern: @"Email:(.+)$",
options: RegexOptions.Multiline).Groups[1].Value;
Console.WriteLine(email);
Ardi1234@yahoo.com
正则表达式很棒,但是这里有一种不用它们的方法。
var inputvalue = @"
OrderId:009
Email:Ardi1234@yahoo.com
ProductId:X206";
var email = inputvalue.Split()
.FirstOrDefault(l => l.StartsWith("email:", ignoreCase: true, culture: CultureInfo.InvariantCulture))
?.Replace("email:", "",ignoreCase: true, CultureInfo.InvariantCulture);
Console.WriteLine(email);
输出:
Ardi1234@yahoo.com
答案 2 :(得分:-1)
您可以尝试:Email\:(.+)
不清楚换行符输入字符串是否中断。
PS:非常有用的工具:https://www.regextester.com
答案 3 :(得分:-1)
我一直首选命名捕获组,因为它们避免用魔法数字填充代码。但是,代码的问题是,与希望匹配的数据相比,正则表达式中有额外的空间。无需在此处转义空格或冒号:
Regex.Match(input: inputvalue,
pattern: @"Email:(?<eml>.+)$",
options: RegexOptions.Multiline).Groups["eml"].Value;
我注意到您已将多行设置为true,因此$表示“行的末尾”而不是“整个输入的末尾”,因此可以正确捕获电子邮件地址,但它很可能包含尾随\r
-注意为此,如果有问题
如果您的文件在冒号和电子邮件地址之间可能有一些空格,请考虑以下模式:
Regex.Match(input: inputvalue,
pattern: @"Email: *(?<eml>.+)$",
options: RegexOptions.Multiline).Groups["eml"].Value;
这将匹配冒号和电子邮件之间的“零个或多个空格”,但不会将其捕获到电子邮件组中
没有空格,正则表达式可以匹配空格:
使用空格,正则表达式可以匹配空格:
没有空格,正则表达式不能匹配空格: