-3

我正在尝试获取对象的文本值,通过正则表达式从中获取信息,然后将该输出键入记事本。下面是我的代码,对象引用都是正确的。我已经能够在记事本中输入其他信息,包括我试图提取其正则表达式的对象的全文,所以我认为 Match.Groups[1].Value 存在问题,但我似乎无法弄明白。

string pattern= @".*[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s(A|P)M$";
string input = repo.ChangedByDate.Element.GetAttributeValueText("Text");

Match match = Regex.Match(input, pattern);

string dateRegex = match.Groups[1].Value;

Notepad.Textbox.PressKeys(dateRegex);

编辑: 抱歉,我发布得太快而且没有更多相关信息。

上面的代码旨在仅匹配原始文本为的字符串的日期/时间部分:

Current date and time is: 8/7/2013 12:15:02 PM

所以我想提取的只是8/7/2013 12:15:02 PM分配给pattern.

截至目前,没有任何输出被放置到记事本中。但是,如果我要将代码更改为以下内容:

string input = repo.ChangedByDate.Element.GetAttributeValueText("Text");

Notepad.Textbox.PressKeys(input);

我在记事本中的输出是Current date and time is: 8/7/2013 12:15:02 PM

4

3 回答 3

2

Groups[0]包含整个匹配项(可能是给定正则表达式的整个字符串)。

Groups[1]包含第一个分组(在本例中为“A”或“P”,因为您使用了()

如果这与您所看到的不一致,您将不得不提供更多详细信息,因为我们没有输入字符串,更重要的是无法查看Match您正在生成的对象的状态。

于 2013-08-07T16:07:02.100 回答
2

.*则表达式中的 将匹配字符串的开头。您可以完全排除它,并获得第 0 组(正则表达式匹配的所有内容)。请注意,您还应该在访问组之前检查是否成功。

string pattern= @"[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s[AP]M";

Match match = Regex.Match(input, pattern);

if (match.Success)
{
  string dateRegex = match.Groups[0].Value;
  Notepad.Textbox.PressKeys(dateRegex);
}
于 2013-08-07T16:56:17.883 回答
2

这将为您完成:

.*([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s[AP]M)$

首先,您需要对整个 Regex 进行分组,因为您想要整个结果,所以现在将在Groups[1]. 其次,您只需要[AP]M在正则表达式的末尾使用 , 。

这里有一个Rubular 来证明它

于 2013-08-07T17:01:30.437 回答