在空白前解析文本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+)
你能澄清一下你到底想匹配什么吗?让我们先描述一下是什么让你认识到这些是你想匹配的值。例如,它是“整行的一个或多个字母字符,后跟空格,后跟数字?”?(没有其他内容)“?在这种情况下,您的正则表达式可以看起来像
\\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]+
。默认情况下,^
和$
也会匹配整个字符串的开头和结尾,而不是行。我们需要多行标志来更改该行为。