第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

包含數(shù)字、字母、表達(dá)式和括號的公式模式

包含數(shù)字、字母、表達(dá)式和括號的公式模式

C#
料青山看我應(yīng)如是 2023-05-13 16:16:22
我正在嘗試為以下示例編寫公式的正則表達(dá)式。C=A+B  => Output for match will be {A, +, B}D= C+50 => Output for match will be{C, +, 50}E = (A+B)*C -100 => Output for match will be{(, A, +, B, ), *, C, -, 100}我試過正則表達(dá)式[A-Z(\d*)*+/-]這個的輸出是{A, +, 5, 0}但它沒有給出正確的輸出A+50
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

我建議FSM(有限狀態(tài)機(jī))而不是正則表達(dá)式。3我們這里有狀態(tài):

  1. 既不是變量,也不是數(shù)字0

  2. 變量內(nèi) 1

  3. 數(shù)以內(nèi)2

代碼:

private static IEnumerable<string> Parse(string formula) {

  int state = 0;


  StringBuilder buffer = new StringBuilder();


  foreach (var c in formula) {

    if (state == 0) { // neither var nor number

      if (char.IsWhiteSpace(c))

        continue;


      if (char.IsDigit(c)) {

        buffer.Append(c);

        state = 2;

      }

      else if (char.IsLetter(c)) {

        buffer.Append(c);

        state = 1;

      } 

      else 

        yield return c.ToString();

    }

    else if (state == 1) { // within variable

      if (char.IsDigit(c) || char.IsLetter(c))

        buffer.Append(c);

      else {

        yield return buffer.ToString();

        buffer.Clear(); 


        state = 0;


        if (!char.IsWhiteSpace(c))

          yield return c.ToString();

      }

    }

    else if (state == 2) { // within number

      if (char.IsDigit(c))

        buffer.Append(c);

      else if (char.IsLetter(c)) {

        // 123abc we turn into 123 * abc

        yield return buffer.ToString();

        buffer.Clear();


        state = 1; 


        yield return "*";


        buffer.Append(c);

      }

      else {

        yield return buffer.ToString();

        buffer.Clear();


        state = 0;


        if (!char.IsWhiteSpace(c))

          yield return c.ToString();

      } 

    }

  } 


  if (buffer.Length > 0)

    yield return buffer.ToString();

}

演示:


  string[] tests = new string[] {

    "C=A+B",

    "D= C+50",

    "E = (A+B)*C -100",

  };


  string result = string.Join(Environment.NewLine, tests

    .Select(test => new {

      formula = test,

      parsed = Parse(test)

        .SkipWhile(term => term != "=") // we don't want "C = " or alike part

        .Skip(1)

    })

    .Select(test => $"{test.formula,-20} => {string.Join(", ", test.parsed)}"));


 Console.Write(result);

結(jié)果:


C=A+B                => A, +, B

D= C+50              => C, +, 50

E = (A+B)*C -100     => (, A, +, B, ), *, C, -, 100


查看完整回答
反對 回復(fù) 2023-05-13
?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗 獲得超4個贊

|對單個項目(例如圖案)使用(或)

\d+|\W|\w

轉(zhuǎn)換為任何數(shù)字或任何非字母字符或任何字母字符。


查看完整回答
反對 回復(fù) 2023-05-13
  • 2 回答
  • 0 關(guān)注
  • 184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號