正则表达式#2

时间:2010-07-01 11:52:44

标签: c# regex

我如何解析以下内容?

data (DIR1:input bit;
      DGG2:input bit;
      OENEG1:input bit;
      OE_NEG2:input bit;
      A1:inputoutput bit_vector(1 to 9);
      A2,H5,J7:inputoutput bit_vector(1 to 9);
      B1,E4,Y7:inputoutput bit_vector(1 to 9);
      B2:inputoutput bit_vector(1 to 9);
                TGY:output bit;
      THHH, Tff, TsD:input bit);

我希望字典中的输出如下所示

 Dictionary<string,string> l_dictData = new Dictionary<string,string>();

解析后,l_dictData应填充结果:

 l_dictData["inputbit"] = "DIR1,DGG2,OENEG1,OE_NEG2,THHH,Tff,TsD";

 l_dictData["inputoutputbit"] = "A1(1),A1(2),....,A1(9)A2(1),A2(2)....A2(9),H5(1)....H5(9),J7(1),...J7(9),B1(1),....B1(9),E4(1),....E4(9),Y7(1),...Y7(9),B2(1),....B2(9)";

 l_dictData["outputbit"] = "TGY";

这是我的正则表达式

    1. ([ \t\r\n]*)?(data|DATA)([ \t\r\n]*)?(\()?
    2.  "[ \t\r\n]*(?<PINFUNC>(inputbit|outputbit|inputoutputbit))(_vector[ \t\r\n]*\([ \t\r\n]*(?<START>([0-9]+))[ \t\r\n]*(to|downto)[ \t\r\n]*(?<END>([0-9]+))[ \t\r\n]*\))?

注意:

“:”之前的文本(半冒号被视为字典的值)

如果您有任何疑问,请告诉我

2 个答案:

答案 0 :(得分:4)

我不会使用正则表达式。我会做以下事情:

  1. 过滤掉括号内容。
  2. 拆分你的字符串;获得个人价值观。
  3. 创建一个类似于dictionary<string,list<string>>
  4. 的保留对象
  5. 遍历您的每个名称/值事物(例如“DIR1:输入位”)并拆分:
  6. 计算你的密钥和价值(你的密钥似乎与“:”
  7. 之后的密钥完全匹配
  8. 如果key在字典中,则将值添加到列表中,如果key还没有,则需要先创建字符串列表。
  9. 使用字典完成循环,引用值列表。
  10. 循环浏览新词典,只需将列表转换为单个字符串,即可将值写入最终词典。
  11. 利润。
  12. 哦,你可能需要一些trim()来处理你的空白。

答案 1 :(得分:1)

此表达式:(?:\(|\s)\s*([\w| |,]*):(\w*?) bit.*?;

得出这些结果:

[1] => Array
    (
        [0] => DIR1
        [1] => DGG2
        [2] => OENEG1
        [3] => OE_NEG2
        [4] => A1
        [5] => A2,H5,J7
        [6] => B1,E4,Y7
        [7] => B2
        [8] => TGY
        [9] => THHH, Tff, TsD
    )

[2] => Array
    (
        [0] => input
        [1] => input
        [2] => input
        [3] => input
        [4] => inputoutput
        [5] => inputoutput
        [6] => inputoutput
        [7] => inputoutput
        [8] => output
        [9] => input
    )

在逗号上拆分,修剪空格,在键上添加“位”,然后就完成了。

感谢My Regex Tester(如果您要求,也会解释这一点):http://www.myregextester.com/index.php