在空白前解析文本Java正则表达式匹配,在空白后解析数字以生成CSV

在空白前解析文本Java正则表达式匹配,在空白后解析数字以生成CSV,java,regex,Java,Regex,目前我正在使用这个简单的正则表达式: [^\s] 我在他的帮助下拼凑起来的 它可以获取以下信息: 但是,完整数据集如下所示: #### LOGS #### CONSOLE: makePush 2196 makePush 638 makePush 470 opAdd 8342 opAdd 288 opStop 133 0x DEBUG: #### TRACE #### P

目前我正在使用这个简单的正则表达式:

[^\s]
我在他的帮助下拼凑起来的

它可以获取以下信息:

但是,完整数据集如下所示:

#### LOGS ####
CONSOLE:
makePush            2196
makePush            638
makePush            470
opAdd           8342
opAdd           288
opStop          133
0x
DEBUG:
#### TRACE ####
PUSH32          pc=00000000 gas=10000000000 cost=3

PUSH32          pc=00000033 gas=9999999997 cost=3
Stack:
00000000  0000000000000000000000000000000000000000000000000000000000000005

PUSH32          pc=00000066 gas=9999999994 cost=3
Stack:
00000000  0000000000000000000000000000000000000000000000000000000000000005
00000001  0000000000000000000000000000000000000000000000000000000000000005

ADD             pc=00000099 gas=9999999991 cost=3
Stack:
00000000  0000000000000000000000000000000000000000000000000000000000000005
00000001  0000000000000000000000000000000000000000000000000000000000000005
00000002  0000000000000000000000000000000000000000000000000000000000000005

ADD             pc=00000100 gas=9999999988 cost=3
Stack:
00000000  000000000000000000000000000000000000000000000000000000000000000a
00000001  0000000000000000000000000000000000000000000000000000000000000005

STOP            pc=00000101 gas=9999999985 cost=0
Stack:
00000000  000000000000000000000000000000000000000000000000000000000000000f
makePush, 2196
makePush, 638
makePush, 470
opAdd, 8342
opAdd, 288
opStop, 133
最后,我需要我的结果如下所示:

#### LOGS ####
CONSOLE:
makePush            2196
makePush            638
makePush            470
opAdd           8342
opAdd           288
opStop          133
0x
DEBUG:
#### TRACE ####
PUSH32          pc=00000000 gas=10000000000 cost=3

PUSH32          pc=00000033 gas=9999999997 cost=3
Stack:
00000000  0000000000000000000000000000000000000000000000000000000000000005

PUSH32          pc=00000066 gas=9999999994 cost=3
Stack:
00000000  0000000000000000000000000000000000000000000000000000000000000005
00000001  0000000000000000000000000000000000000000000000000000000000000005

ADD             pc=00000099 gas=9999999991 cost=3
Stack:
00000000  0000000000000000000000000000000000000000000000000000000000000005
00000001  0000000000000000000000000000000000000000000000000000000000000005
00000002  0000000000000000000000000000000000000000000000000000000000000005

ADD             pc=00000100 gas=9999999988 cost=3
Stack:
00000000  000000000000000000000000000000000000000000000000000000000000000a
00000001  0000000000000000000000000000000000000000000000000000000000000005

STOP            pc=00000101 gas=9999999985 cost=0
Stack:
00000000  000000000000000000000000000000000000000000000000000000000000000f
makePush, 2196
makePush, 638
makePush, 470
opAdd, 8342
opAdd, 288
opStop, 133
我提供的
regex
显然不够健壮,无法捕捉到这一点

我想做的是:

  • 忽略输入中没有格式为
    makePush 2196

  • 对于上述形式的线条

    • 把它分成三组“

      第一个单词
      空白
      第二个单词

  • 最后,我想保存表单的csv:

    第一个单词
    第二个单词

    • 试试这个

      /([a-zA-Z]+)[\t ]+(\d+)/g
      
      在哪里

      • ([a-zA-Z]+)
        匹配单个单词的文本
      • [\t]+
        匹配水平空格
      • (\d+)
        与数字文本匹配
      试试这个(来自Pshemo的想法,但使用\w+)


      你能澄清一下你到底想匹配什么吗?让我们先描述一下是什么让你认识到这些是你想匹配的值。例如,它是“整行的一个或多个字母字符,后跟空格,后跟数字?”?(没有其他内容)“?在这种情况下,您的正则表达式可以看起来像
      \\w+\\s+\\d+
      (可能与组一起,这样您就可以只使用部分匹配项)。我在OP中添加了更多上下文-描述我正试图做的事情,您正在寻找类似
      ^([a-zA-Z]+)\\s+(\\d+$
      。现在在组1中,您有了
      [a-zA-Z]的匹配项+
      part和group 2中的match from
      \\d+
      。要获取组的内容,只需使用
      matcher.group(index)
      。我差不多是用这个
      [a-zA-Z+[^\t]+0-9]
      ,但是有没有一种方法可以用java忽略那些没有适合每一种形式的组件的行,你知道我的意思吗?演示:
      \\w+
      还将包括
      0000000000000000000000000000000000000000000000000000000000000000000000000005
      ,它看起来不像OP想要的结果(这就是为什么我使用
      [a-zA-Z]+
      。默认情况下,
      ^
      $
      也会匹配整个字符串的开头和结尾,而不是行。我们需要多行标志来更改该行为。