无法在字符串中获取正则表达式匹配的值

时间:2019-05-10 14:05:40

标签: c# regex string

我有一个带有列表框的表单,在此列表框中,我有来自.xml文件的数据。

当我选择一个输入时,我会使用:

string s = lstCust.SelectedItem.ToString();

它给我:“ John Doe,JohnDoe @ stack.io电话:00336598745”

现在,我只想获取邮件地址,因此我正在使用此Regex进行尝试:

@"([A-Za-z0-9._ % -] +@[A-Za-z0-9.-] +\.[a-zA-Z]{2,4})*"

使用此方法:

string mail = Regex.Match(s, @"([A-Za-z0-9._ % -] +@[A-Za-z0-9.-] +\.[a-zA-Z]{2,4})*").Value;

我确定我的正则表达式可以正常工作,因为

Regex.Match(s, @"([A-Za-z0-9._ % -] +@[A-Za-z0-9.-] +\.[a-zA-Z]{2,4})*").Success.ToString();

给我一​​个true

但是我的var mail 的值始终等于“”(空)。

关于我在做什么错的任何想法吗?

Thx

3 个答案:

答案 0 :(得分:4)

您的正则表达式模式中有空格阻止其匹配。删除空格和末尾的*

string mail = Regex.Match(s, @"([A-Za-z0-9._ % -]+@[A-Za-z0-9.-]+\.[a-zA-Z]{2,4})").Value;

Regex Storm Example

答案 1 :(得分:1)

尝试以下正则表达式。

([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)

它将通过给定字符串 John Doe,JohnDoe@stack.io电话:00336598745

给您发送电子邮件 JohnDoe@stack.io

Regex Demo

答案 2 :(得分:0)

您的表达式实际上不匹配。捕获组后面有df = pd.read_csv( file_path, error_bad_lines=True, sep = ';', decimal=',', parse_dates=list(parse_dates) ) (0个或多个事件)。因为该表达式实际上不匹配,所以它在捕获组中找到了0个出现的表达式,但是由于KeyError: 0被允许,因此匹配成功。

如果您要匹配的字符串中只有一个电子邮件地址。删除末尾的*,并尝试找出正则表达式实际上不起作用的原因。