【发布时间】:2020-04-03 08:29:03
【问题描述】:
我需要将地址行分成 3 个部分,每个部分的大小不同。在这种情况下:40、30 和 30 个字符。我想用空格分割输入字符串,所以这很有意义。
为此,我写了一个正则表达式:(.{1,32})([ ]+.{1,30}){0,1}([ ]+.{1,30}){0,1},并在这个网站上试了一下:https://regex101.com。成功了!
我搬到 Visual Studio 来编写一些代码来检查一下:
public static void TEST()
{
List<string> ok = new List<string>();
List<string> err = new List<string>();
var lista = GetLista();
foreach (string dir in lista)
{
Regex regex = new Regex(@"(.{1,32})([ ]+.{1,30}){0,1}([ ]+.{1,30}){0,1}");
dir = dir.Trim();
GroupCollection cap = regex.Match(dir).Groups;
if (cap.Count == 0) err.Add(dir);
else ok.Add($"{dir};{cap[0].Value};{(cap.Count > 1 ? cap[1].Value.Trim() : "")};{(cap.Count > 2 ? cap[2].Value : "")};{(cap.Count > 3 ? cap[3].Value.Trim() : "")}";);
}
File.WriteAllLines("ok.txt", txt);
File.WriteAllLines("er.txt", err);
}
结果非常不同,根本不匹配。正则表达式在 C# 中是否有所不同?
还有其他方法可以实现吗?
已编辑:在不同之处给出正则表达式。
更新:我将提供一个示例。让我们来看看这个字符串: “埃里克·阿德西尔公司 LA ISLA DE LA PALMA”。
c# 结果:"ERIK ADESIR COMPANY LA ISLA DE L";"ERIK ADESIR COMPANY LA ISLA DE L";;
想要:“ERIK ADESIR COMPANY LA ISLA DE”;“LA PALMA”;“”
我认为问题在于正则表达式没有获取整个字符串,只是其中的一部分。
【问题讨论】:
-
请edit这个问题并给出一些好的输入示例+每个产生的内容+它需要产生的内容。
-
请发布您使用正则表达式解析的示例字符串。这样,我们也可以在最后执行所需的测试。
-
我修改了它,现在知道了吗?谢谢!
标签: c# regex visual-studio