[英]regex to split numbers and operators
如何將字符串下方拆分為數字和運算符分開的字符串列表(字符串不包含括號或負數)。
例:
inputString = 1+2-2.3*4/12.12
outputList = {1,+,2,-,2.3,*,4,/,12.12}
下面只會給我數字。 我也需要運算符
var digits = Regex.Split(inputString , @"\D+");
由於您確認輸入的結構相當簡單-沒有括號,沒有負數-您可以使用簡單的\\s*([-+/*])\\s*
正則表達式來分割字符串。
請注意, Regex.Split
還將在結果中輸出所有捕獲的子字符串 :
如果在Regex.Split表達式中使用了捕獲括號,則任何捕獲的文本都將包含在結果字符串數組中。
所以用
Regex.Split(input, @"\s*([-+/*])\s*")
.Where(n => !string.IsNullOrEmpty(n))
.ToList();
只是不要忘記從結果列表/數組中刪除空元素。
圖案細節 :
\\s*
-零個或多個空格(以“修剪”元素) ([-+/*])
-組1捕獲-
, +
, /
或*
\\s*
-零個或多個空格(以“修剪”元素) 參見IDEONE演示 :
var input = "1+2-2.3*4/12.12";
var results = Regex.Split(input, @"\s*([-+/*])\s*")
.Where(n => !string.IsNullOrEmpty(n))
.ToList();
Console.WriteLine(string.Join("\n", results));
您可以使用Regex.Matches而不是Regex.Split:
var test = "1 + 2 - 2.3 * 4 / 12.12";
foreach(Match match in Regex.Matches(test, @"\d+(,\d+)*(\.\d+(e\d+)?)|\d+|[\\+-\\*]"))
Console.WriteLine(match.Value);
這似乎對我有用
/([\d\.]+)|([+-\/\*])+/g
僅供參考-LinqPad是一個很棒的工具,可以在C#中測試Regex
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.