所以我有一长串数字和字符,我想过滤掉一个子字符串。我挣扎的是我需要一个特定值的完全匹配(从S开始),但这可能与另一个值不匹配。
输入:
S10 1+0000000297472+00EURS100 1+0000000297472+00EURS1023P 1+0000000816072+00EUR
输入就是这样。
输入细分:
S10 1+0000000297472+00EUR
=>
我需要匹配例如S10,我只希望这个子字符串直到EUR。我不希望它在S100或S1023P或任何其他组合上匹配。仅限于S10
输出:
S10 1+0000000297472+00EUR
我尝试使用Regex在' 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 +之间没有空格
S1000000 1 + 0000000546546 + 00EUR
例如,在寻找S1000000
时需要匹配:
S10000001+0000000297472+00EUR
可能不匹配:
S10 1+0000001748447+00EUR
S1023P 1+0000000816072+00EUR
S10/15 1+0000000546546+00EUR
答案 0 :(得分:1)
您可以使用需要空格(或空格)的正则表达式出现在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,我们会检查一个空格。
答案 1 :(得分:0)