Regex 匹配文件中的字符串并将其附加到另一个文件

Regex 匹配文件中的字符串并将其附加到另一个文件,regex,powershell,Regex,Powershell,有人能解释一下在这种情况下分组是如何工作的吗。因为我不明白 我匹配的原始HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="refresh" content="60" > <title></title> </head> <body> <p><font s

有人能解释一下在这种情况下分组是如何工作的吗。因为我不明白

我匹配的原始HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="60" >
<title></title>
</head>
<body>
<p><font size=4></font></p>
<P></p>
<P></p>
<p></p>
<p></p>
<table border="1">
<tr>
    <td>
    Mesure </font>
    </td>
    <td>
    853.63
    </td>
</tr>
<tr>
    <td>
    Date and time
    </td>
    <td>
    2020/06/10 13:41:52
    </td>
</tr>
<tr>
    <td>
    Text
    </td>
    <td>
    <font COLOR="BLACK">OTVOREN</font><font COLOR="RED"></font>
</tr>
</table>    
</body>
</html>
第二个字符串是“2020/06/10 13:41:52”:

3d字符串为“OTVOREN”:

第四个是“红色”:

他们对上面的例子很熟悉

所以我想得到这个字符串并将它们附加到一个带有“,”分隔符的文件中。例如:

853.63,2020/06/10  13:41:52,OTVOREN,RED
854.00,2020/06/10  13:41:52,ZATVOREN,BLUE
...
在这一点上,我完成了获取第二个字符串的步骤: 853.632020/06/10 13:41:52

那么为什么第一个字符串在组1中,第二个字符串在组4中(尝试4次后:)?另外两个我无法得到,因为我不知道数字组

已解决:
我在第3个正则表达式([a-Z])*中犯了一个错误,而不是([a-Z]*)。这使它进入第11组

为什么第一个字符串在组1中,第二个字符串在组4中(尝试4次后:)

因为您的模式中有嵌套的捕获组。让我们看一下第一个顶级组:

1组
________________________________
/                                \
(([0-9]*[ ])?([0-9]*[,\.])?[0-9]+)
\_________/ \___________/
第2组第3组
这可以通过使用
$matches
变量来观察:

PS C:\>$null='123 456.78'-match'([0-9]*[])?([0-9]*[,\.])?[0-9]+'
PS C:\>$Matches
名称值
----                           -----
3                              456.
2                              123
1                              123 456.78
0                              123 456.78
为什么第一个字符串在组1中,第二个字符串在组4中(尝试4次后:)

因为您的模式中有嵌套的捕获组。让我们看一下第一个顶级组:

1组
________________________________
/                                \
(([0-9]*[ ])?([0-9]*[,\.])?[0-9]+)
\_________/ \___________/
第2组第3组
这可以通过使用
$matches
变量来观察:

PS C:\>$null='123 456.78'-match'([0-9]*[])?([0-9]*[,\.])?[0-9]+'
PS C:\>$Matches
名称值
----                           -----
3                              456.
2                              123
1                              123 456.78
0                              123 456.78


请发布一个可以复制这些结果的示例字符串:)@MathiasR.Jessen我发布了示例字符串,每个字符串都带有我在示例代码中使用的正则表达式。否,我指的是输入——你匹配的原始HTMLagainst@MathiasR.Jessen更新了问题请发布一个可以复制这些结果的示例字符串:)@MathiasR.Jessen我发布了示例字符串,每个字符串都带有我在示例代码中使用的正则表达式。否,我指的是输入——你匹配的原始HTMLagainst@MathiasR.Jessen更新了questionOk,因此第二个字符串位于有6个嵌套组的组4中。所以4+6=10,这意味着我需要使用组11作为第三个字符串。但是结果是“N”@HristianYordanov我强烈建议您使用
$matches
技巧“自己看”:)是的,我使用了它。第二个字符串在正则表达式中有7个组,就像第一个注释一样。但仍不工作…第三个字符串有两个组0为“OTVOREN”,组1为“N”。当我使用第11组时,N个竖起,所以我需要减去1个组。然后我使用第10组,结果是“13:41:52”。没有“OTVOREN”的组?我在第三个正则表达式中犯了一个错误
([a-Z])*
,而不是
([a-Z]*)
。第11组正在工作。感谢
$matches
技巧。在此之前,我经常计算groupsOk,所以第二个字符串位于组4中,其中有6个嵌套组。所以4+6=10,这意味着我需要使用组11作为第三个字符串。但是结果是“N”@HristianYordanov我强烈建议您使用
$matches
技巧“自己看”:)是的,我使用了它。第二个字符串在正则表达式中有7个组,就像第一个注释一样。但仍不工作…第三个字符串有两个组0为“OTVOREN”,组1为“N”。当我使用第11组时,N个竖起,所以我需要减去1个组。然后我使用第10组,结果是“13:41:52”。没有“OTVOREN”的组?我在第三个正则表达式中犯了一个错误
([a-Z])*
,而不是
([a-Z]*)
。第11组正在工作。感谢
$matches
技巧。在那之前,我经常数一组
(([0-9]*[ ])?([0-9]*[,\.])?[0-9]+)\s*
(([0-9]*[/,:]])?([0-9]*[/,:])?([0-9]*[/,:])?([0-9]*)?(\s*)?([0-9]*[:][0-9]*[:][0-9]*))
([A-Z])*
([A-Z])*
853.63,2020/06/10  13:41:52,OTVOREN,RED
854.00,2020/06/10  13:41:52,ZATVOREN,BLUE
...