我不确定为什么但是由于某种原因,Regex Split方法已经超出我的想象。我正在尝试通过教程查看我需要的东西,似乎找不到任何东西。
我只是在阅读一个excel文档,并希望格式化一个字符串,如$145,000-$179,999
,给我两个字符串。 145000
和179999
。与此同时,我想将'$180,000-Limit
之类的字符串修剪为180000
。
var loanLimits = Regex.Matches(Result.Rows[row + 2 + i][column].ToString(), @"\d+");
以上代码似乎将'$145,000-$179,999
分为4个部分:145
,000
,179
,999
。关于如何实现我的要求的任何想法?
答案 0 :(得分:2)
正则表达式完全按字符匹配(在正则表达式中不知道“数字”或“单词”的概念 - 您必须在表达式中自己定义)。您正在使用的表达式\d+
使用字符类\d
,这意味着任何数字0-9(和+
表示匹配一个或多个)。所以在表达式$145,000
中,请注意您要查找的部分不仅仅是数字;它还包括逗号。因此,正则表达式会查找与正则表达式匹配的每个连续字符组,即四组数字。
有几种方法可以解决这个问题。
,
,所以(\d|,)+
,这意味着匹配 数字或逗号的行中的多个字符。将有两个匹配项:145,000
和179,999
,您可以使用myStr.Replace(",", "")
进一步删除逗号。 (DEMO)Regex.Replace
与表达式[^\d-]+
一起使用 - 这意味着匹配任何非数字或连字符的内容 - 然后将其替换为""
。然后结果将是145000-179999
,您可以使用简单的非正则表达式拆分myStr.Split('-')
进行拆分,以获得您的两个部分。 (DEMO)请注意,对于您的第二个示例($180,000-Limit
),您需要额外检查以计算第一个示例中Match
返回的结果数,以及Split
中的{{1}}第二个示例,用于确定范围中是否有两个数字,或者只有一个数字。
答案 1 :(得分: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);
}
答案 2 :(得分:1)
使用RegEx的另一种方法是使用DotNet框架中的内置字符串和char方法。假设输入字符串总是只有一个例子:
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
Split
方法x.Where...
Join
方法