如何在C#中拉出用户文本输入的距离?

时间:2013-03-14 01:49:01

标签: c# regex

我有一个搜索栏,访客用来搜索附近的地方。它由两个输入框组成:关键字和距离。

我希望将其简化为一个框,但允许访问者输入距离。他们可以输入“Costco in 5km”“Denny's 2mi”等词。

在服务器端,我想拉出输入的距离。我意识到有很多错误的余地。访问者可以在号码(4公里)之后放置一个空格,或者可以使用全文(4公里),或者可能担心任何其他问题。

如果我想为访问者提供输入(n)km或(n)mi的能力,那么将数据解析为单独变量的好方法是什么?

假设访客进入“中国印度韩国餐馆5mi”。我想把它分成:

string keywords = "Chinese Indian Korean restaurants";
string distance = 5; //(notice no mi, or km)

我认为需要某种类型的正则表达式,但我的正则表达式技能非常缺乏。提前谢谢!

1 个答案:

答案 0 :(得分:1)

是的,在这种情况下,正则表达式是你的朋友。我将专注于匹配距离并将其从输入文本中删除。剩下的是关键字..

Regex distRex = new Regex("(?<dist>\\d+)\\s*(?<unit>mi|km|ft)", RegexOptions.IgnoreCase);

然后你可以这样做:

Match m = distRex.Match(testInput);
if(m.Success)
{
    string keywords = distRex.Replace(testInput, string.Empty);

    // you may want to further sanitize the keywords by replacing occurances of common wors
    //   like "and", "at", "within", "in", "is" etc.

    string distanceUnits = m.Groups["unit"].Value;
    int distance = Int32.Parse(m.Groups["dist"].Value);    
}