为什么我的Regex子模式只在递归匹配时才工作?

问题描述:

Link to demo of the Regex.我不明白为什么(?P=name)导致模式不匹配。我不能使用递归,因为我在C#中使用模式。为什么我的Regex子模式只在递归匹配时才工作?

+2

欢迎来到'SO'。真的,这是一个禁忌。改为使用解析器! – Jan

+0

[查看此链接](https://stackoverflow.com/a/100393/8195525) – Derek

您的问题是C#正则表达式不支持子例程,这是(?P(DEFINE)创建的。您也无法使用反向引用,因为Row值不相等,您只需将内联子程序插入并重复:

^ +<tr class="clickable" data-id="(?<AccountID>[^"]+)" data-jobid=\"(?<JobID>[^\"]+)\"(?:(?:<\/td)?>[^>]+>)(?<InvoiceID>[^<]+)(?:(?:<\/td)?>[^>]+>)(?<Date>[^ ]+)\n +(?:(?:<\/td)?>[^>]+>)(?<Status>[^<]+)(?:(?:<\/td)?>[^>]+>)(?<Type>[^<]+)(?:(?:<\/td)?>[^>]+>)(?<Total>[^<]+)(?:(?:<\/td)?>[^>]+>)(?<Balance>[^<]+)(?:(?:<\/td)?>[^>]+>)(?<Paid>[^<]+)(?:(?:<\/td)?>[^>]+>)(?<Technician>[^<]+)(?:(?:<\/td)?>[^>]+>)