gpt4 book ai didi

c# - 过滤完整字符串匹配但不过滤子字符串

转载 作者:行者123 更新时间:2023-11-30 17:41:15 26 4
gpt4 key购买 nike

所以我有一长串数字和字符,我想过滤掉一个子串。我正在努力解决的问题是我需要对某个值(从 S 开始)进行完全匹配,但这可能与另一个值不匹配。

输入:

S10     1+0000000297472+00EURS100    1+0000000297472+00EURS1023P  1+0000000816072+00EUR

输入就是这样

输入分解:

S10     1+0000000297472+00EUR
  • 每个部分都以标签 S 开始,以 EUR 结束
  • 中间有空格,因为每一部分都有固定的长度

=>

  • 索引 0 : 标签 'S' 的长度为 1
  • index 1 : 长度为7的代码
  • 索引 8:长度为 1 的数字类型
  • index 9 : 符号长度为 1
  • 索引 10:长度为 13 的值
  • index 23 : 符号长度为 1
  • 索引 24:长度为 2 的指数
  • 索引 26:长度为 3 的单元

我需要在例如 S10 上进行匹配,并且我只想要此子字符串直到 EUR。我不希望它与 S100 或 S1023P 或任何其他组合匹配。仅在 S10 上

输出:

S10     1+0000000297472+00EUR

我正在尝试使用正则表达式在“S + 代码”上找到我的匹配项。我正在对我的搜索查询进行完全匹配,然后一旦出现任何内容,我就不再需要它了。但是这样做也会丢弃实际匹配项,因为在 S10 之后,值将跟随 [^\d|^\D])+\w

 foreach (var field in fieldList)
{
var query = "S" + field.BallanceCode;
var index = Regex.Match(values, Regex.Escape(query) + @"([^\d|^\D])+\w").Index;
}

例如寻找S10时

需要匹配:

S10 1+0000000297472+00EUR

可能不匹配:

S10/15  1+0000001748447+00EUR 
S1023P 1+0000000816072+00EUR
S10000001+0000000546546+00EUR

更新:

使用这段代码

var index = Regex.Match(values, Regex.Escape(query) + @"\p{Zs}.*?EUR").Index; 

在寻找时会产生 S10、S10/15 等。但是在字符串中查找 S1000000 不起作用,因为代码和 1+ 之间没有空格

S10000001+0000000546546+00EUR

例如在寻找 S1000000 时

需要匹配:

S10000001+0000000297472+00EUR

可能不匹配:

S10     1+0000001748447+00EUR 
S1023P 1+0000000816072+00EUR
S10/15 1+0000000546546+00EUR

最佳答案

您可以使用要求空格(或空格)紧跟在 field.BallanceCode 之后的正则表达式:

var index = Regex.Match(values, Regex.Escape(query) + (field.BallanceCode.Length < 7 ? @"\p{Zs}" : "") + ".*?EUR").Index;

正则表达式将匹配 S10 ,然后是任何水平空格( \p{Zs} ),然后是除换行符以外的任何 0 个或多个字符(由于 *? 尽可能少)直到第一个 EUR .

(field.BallanceCode.Length < 7 ? @"\p{Zs}" : "")需要检查以支持 7 位数字 BallanceCode .如果它包含 7 位或更多,我们不检查它后面是否有空格。如果长度小于 7,我们检查一个空格。

关于c# - 过滤完整字符串匹配但不过滤子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277458/

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