在这个问题中,我有一个带有地址的字符串;但是,它不能被完美格式化。在我的例子中 字符串候选=“ 20-54 Jackson Avenue Date)Brooklyn,NY 11352” 之所以这样,是因为它是从具有列的pdf读取的,因此它从左到右读取。现在,我目前正在使用此正则表达式:
var reg = Regex.Match(candidate,
@"^(\d*-?\d*\s)([N|S|W|E]\s)?([A-z]*((\s[A-z]*)?))\s([A-z]*)\s([A-z]*(\s)?(([A-z]*)?),)");//(\s[A-z]*\s)(\d*)");
我认为它不起作用的原因是由于Date之后的')'。我需要将地址,城市,州和邮编分别存储在单独的变量中。我使用了通常的string addypractice = reg.Groups[0].Value;
,但是由于左括号的原因,它总是空值。是否有人对如何处理此问题有任何建议,或者有更简单的方法来解决我的问题?谢谢!!
答案 0 :(得分:0)
仅基于问题中给出的输入字符串:
正则表达式:
[a-zA-Z0-9-]+[^!@#$%^&*(),.?":{}|<>,\d{5}]*
工作示例:https://regex101.com/r/7HUc9H/4
此正则表达式考虑了地址前有特殊字符的其他情况:
例如,像这样的字符串:
。您甚至可以根据需要向此正则表达式添加更多字符类。
编辑:
C#代码读取您的字符串以及与上述正则表达式的匹配项以获取所需的结果:
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace Test1
{
public static class Program
{
public static void Main(string[] args)
{
string str = "20-54 Jackson Avenue Date) Brooklyn, NY 11352";
string[] result =Regex.Matches(str, "[a-zA-Z0-9-]+[^!@#$%^&*(),.?\":{}|<>,\\d{5}]*").Cast<Match>().Select(x=>x.Value).ToArray();
Console.WriteLine("Address:"+result[0].Trim());
Console.WriteLine("City:"+result[1].Trim());
Console.WriteLine("State:"+result[2].Trim());
Console.WriteLine("Zip Code:"+result[3].Trim());
Console.ReadLine();
}
}
}
输出: