1

我不知道为什么,但出于某种原因,Regex Split 方法超出了我的想象。我正在尝试浏览教程以了解我需要的东西,但似乎找不到任何东西。

我只是在阅读一个 excel 文档并想格式化一个字符串,例如$145,000-$179,999给我两个字符串。145000179999。同时,我想修剪一个字符串,例如'$180,000-Limitto simple 180000

var loanLimits = Regex.Matches(Result.Rows[row + 2 + i][column].ToString(), @"\d+");

上面的代码似乎'$145,000-$179,999分成 4 部分:145, 000, 179, 999. 关于如何实现我所要求的任何想法?

4

3 回答 3

2

正则表达式完全匹配一个字符(在正则表达式中不知道“数字”或“单词”的概念——你必须在你的表达式中自己定义)。您正在使用的表达式\d+, 使用字符类\d,这意味着任何数字 0-9(并且+意味着匹配一个或多个)。因此,在表达式$145,000中,请注意您要查找的部分不仅仅是由数字组成;它还包括逗号。因此,正则表达式会找到与您的正则表达式匹配的每一个连续字符组,即四组数字。

有几种方法可以解决这个问题。

  1. ,在您的正则表达式中包含so (\d|,)+,这意味着匹配一行中尽可能多的数字逗号字符。将有两个匹配项:145,000179,999,您可以从中进一步删除逗号myStr.Replace(",", "")。(演示
  2. 按照你在标题中所说的做,并删除所有非数字字符。所以你可以使用Regex.Replace这个表达式[^\d-]+——这意味着匹配任何不是数字或连字符的东西——然后用"". 然后结果将是145000-179999,您可以使用简单的非正则表达式拆分,将其拆分myStr.Split('-'),以获得您的两个部分。(演示

请注意,对于您的第二个$180,000-Limit示例MatchSplit.

于 2012-12-08T01:48:36.187 回答
1

您可以尝试通过根据 - 吐出每个字符串来分别处理每个字符串,并从中仅提取数字

 ArrayList mystrings = new ArrayList();
 List<string> myList = Result.Rows[row + 2 + i][column].ToString().Split('-').ToList();

 foreach(var item in myList)
 {

     string result = Regex.Replace(item, @"[^\d]", "");
     mystrings.Add(result);
 }
于 2012-12-08T01:51:56.543 回答
1

使用 RegEx 的替代方法是使用 DotNet 框架中的内置字符串和字符方法。假设输入字符串总是有一个连字符:

string input = "$145,000-$179,999";

var split = input.Split( '-' )
        .Select( x => string.Join( "", x.Where( char.IsLetterOrDigit ) ) )
        .ToList();

string first = split.First(); //145000
string second = split.Last(); //179999
  1. Split首先,您使用标准方法拆分字符串
  2. 然后通过有选择地从集合中的每个项目中仅获取字母或数字来创建一个新字符串:x.Where...
  3. Join然后你使用标准方法加入字符串
  4. 最后,为您的 2 个字符串获取集合中的第一个和最后一个项目。
于 2012-12-08T02:33:35.253 回答