使用正则表达式匹配器从 HTML 字符串检索数字时出现问题

问题描述 投票:0回答:1

我在从网页中的 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;
}
c# .net automation playwright playwright-dotnet
1个回答
0
投票

pattern
看起来很好,你可能只是想逃避尾随点:
\.

当您在正则表达式中定义捕获组时,您应该迭代捕获:

Match match = Regex.Match(successMessages, pattern);
if (match.Success)
{
   var captures = match.Groups[2].Captures;

   var invoiceId = captures.FirstOrDefault()?.Value;
}
© www.soinside.com 2019 - 2024. All rights reserved.