【发布时间】:2019-07-02 14:20:12
【问题描述】:
我目前正在努力使用正则表达式解析 C Output.map 文件。 我分别处理每一行: 一行可能是这样的
__func_name |00010d88| T | FUNC|00000010| |.text
预期输出:
1) “__func_name”
2) “00010d88”
3) “T”
4) “功能”
5) “00000010”
6)(空字符串)
7) “.text”
8) (空字符串)
但是,文本之间的空格数量会有所不同: 另一行可能如下所示:
__func_name2|0007bb7c| T | FUNC|00000034| |.text sourcefile.c:49
1) “__func_name2” 2) “0007bb7c” 3) “T” 4)“功能” 5)“00000034” 6) (空字符串)
7) “.text”
8) "sourcefile.c:49"
正如您所见,不仅空格的数量不同,而且还列出了源文件。 现在我确实尝试使用正则表达式解决这个问题。 我的正则表达式基本上需要以下要求
字母数字字符串
一个(十六进制)数字
一个字母
一个字符串
一个(十六进制)数字
可选字符串
另一个可选字符串
每个组由| 字符分隔。
我试过这个正则表达式。虽然不完整,但 regexr 告诉我我只匹配第一组。
你能帮我弄清楚我的正则表达式有什么问题吗?
([__A-Za-z0-9])\w+|((([\|]{1})&[0-9a-h]&([\|]{1})))\w+|([A-Z])\w+
您可以在此处尝试现场演示: https://regexr.com/4gpvf
编辑:添加预期输出
【问题讨论】:
-
|被用作分隔符似乎相当明显。将其拆分,然后修剪每个结果字符串不是更简单吗?最后一段是.text sourcefile.c:49,可以使用更更简单的正则表达式轻松解析。 -
您希望在第二个示例中得到什么输出 - 您希望源文件成为最终字符串的一部分、两个单独的字符串还是省略了源文件?
-
你是这个意思吗? regex101.com/r/BFDygW/1
-
hm 拆分是个好主意。你的意思是这样吗?
string[] single_element = single_line.Split((char)('|'));? -
只是
single_line.Split('|')。如果您想保留列索引,我不会删除空列。