簡體   English   中英

正則表達式拆分數字和運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM