我在从网页中的 HTML 元素检索特定文本模式时遇到困难。这是 HTML 片段:
这是来自我的网站,我想从“
Work Order 0000037282 has been reissued.
仅:
0000037282
保存它并稍后在另一个页面中使用它,例如workordernumber =
0000037282
<div class="row ng-scope" ng-if="successMessages.length">
<div class="col-lg-12">
<div class="alert alert-success">
<!-- ngRepeat: success in successMessages track by $index -->
<div class="row ng-binding ng-scope" ng-repeat="success in successMessages track by $index" ng-bind="success.message">Invoice 0000026791 has been credited. Credit document HO0000000033 was created.</div>
<!-- end ngRepeat: success in successMessages track by $index -->
<div class="row ng-binding ng-scope" ng-repeat="success in successMessages track by $index" ng-bind="success.message">Work Order 0000037282 has been reissued.</div>
<!-- end ngRepeat: success in successMessages track by $index -->
</div>
</div>
</div>
这是我到目前为止所尝试的,但成功率为 0 :
这是我的测试结果
await reissueWorkOrderConfirmationModal.ConfirmAsync();
string? workOrderNumber = await creditInvoiceModal.GetReissuedWorkOrderNumberAsync();
if (workOrderNumber != null)
{
Console.WriteLine($"Reissued Work Order Number: {workOrderNumber}");
}
else
{
Console.WriteLine("Failed to retrieve the reissued work order number.");
}
这就是我在模式中添加的内容:
public async Task<string?> GetReissuedWorkOrderNumberAsync()
{
// Execute JavaScript in the browser context to retrieve the text of the success message elements
string successMessages = await _page.EvaluateAsync<string>(@"() => {
const messages = Array.from(document.querySelectorAll('.alert.alert-success .row.ng-binding.ng-scope'));
return messages.map(message => message.innerText).join('|');
}");
// Define the regular expression pattern to match the Work Order number
string pattern = @"Work Order (\d+) has been reissued.";
// Use regular expression to match the pattern
Match match = Regex.Match(successMessages, pattern);
// Check if the pattern is found
if (match.Success)
{
// Extract the Work Order number from the matched groups
string workOrderNumber = match.Groups[1].Value;
return workOrderNumber;
}
// Return null if the pattern is not found
return null;
}
pattern
看起来很好,你可能只是想逃避尾随点:\.
。
当您在正则表达式中定义捕获组时,您应该迭代捕获:
Match match = Regex.Match(successMessages, pattern);
if (match.Success)
{
var captures = match.Groups[2].Captures;
var invoiceId = captures.FirstOrDefault()?.Value;
}