gpt4 book ai didi

c# - 匹配返回空字符串

转载 作者:行者123 更新时间:2023-11-30 14:47:41 25 4
gpt4 key购买 nike

我正在使用以下 Regex 从字符串中提取数据:

private static string ExtractRawString(string input, string fieldName)
{
return Regex.Match(input, $@"{fieldName}:(.+?)\n").Groups[1].Value;
}

输入字符串在哪里:

NAME OF PRODUCT:         Product 30AMP \n \nCOMPANY PART NUMBER:   11111\nOEM COMPANY:   COMPANY2 \n \nADD IMAGE HERE:    \n \n \n \n - CHECKED \n \n  \nOEM PART NUMBER:  22222 \nSERIAL NUMBER:  33333 \nCLASSIFICATION:   Product \nDIMENSIONS: UNKNOWN \nWEIGHT:  0.06Kg’s \nCOMPANY PRICE (INC VAT):  R 450.53 ZAR \nOEM PRICE:  \nCoO:  USA/MEXICO \n 

例如,我可以这样调用函数:

var productName = ExtractRawString(inputString, "NAME OF PRODUCT");

这适用于输入字符串中的每个字段(例如 NAME OF PRODUCTCOMPANY PART NUMBER 等)来自 COMPANY PRICE(INC VAT)

当我调用以下代码时,它只返回一个空字符串 (""):

var companyPrice = ExtractRawString(inputString, "COMPANY PRICE (INC VAT)");

我尝试用 (.) 替换 Regex 中的 (.+?) 但结果相同。

当格​​式与所有其他字段相同时,谁能说出为什么返回空字符串?

最佳答案

您需要对键名进行转义,否则,() 将被视为分组构造 运算符。这可以通过 Regex.Escape() 方法来完成。

此外,模式的 :(.+?)\n 部分需要换行符。您只需要使用 greedy 量词版本并删除 \n 因为 . 匹配任何字符,但 .NET 正则表达式中的换行符:

$@"{Regex.Escape(fieldName)}:(.+)"

在这里,Regex.Escape() 将在任何特殊的正则表达式字符前添加文字反斜杠,以便 ( 可以匹配文字 ( 等。贪婪量词会一次获取 1 个或多个非换行符,而惰性量词 (+?) 使正则表达式引擎跳过量化模式并尝试匹配换行符,这使得 \n 成为必需的模式部分,并使模式相当低效。

请注意,为了使 . 匹配除换行符之外的任何字符,您不应将 RegexOptions.Singleline 选项传递给 Regex 构造函数。如果您无法控制它,请使用这样的修饰符组来使 . 匹配非换行符:

$@"{Regex.Escape(fieldName)}:((?-s:.+))"
^^^^^ ^

查看示例 COMPANY PRICE\(INC VAT\):((?-s:.+)) an online .NET regex tester 上的正则表达式演示.

关于c# - 匹配返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43869323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com