有没有办法使用ReGex从文件中读取所有行的第一个单词?

时间:2019-03-23 22:14:38

标签: python regex string file parsing

我正在查看任何txt文件以解析特定信息。该信息是房间的名称,coordinates_x和coordinates_y。房间的名称可以是任何字符串名称(abc6a7b8c_test1n6_等),并且不包含“#”,因为这将成为我的错误管理的一部分。为了进一步解释txt文件,我想始终忽略第一行,而在第一行之后,则是在x和y坐标中创建的房间(例如2 5 0的房间名为{{1 }},坐标为(5,0))。我没有从所需文件中获取所有必要的行字符串。例如,我只会得到以任何字符开头而不带任何字符的字符串,而且还会得到我现在真正不需要的字符串。我是一天前才开始学习Regex的,所以请忍受:)。

我正在使用网站regexr可视化并查看输出搜索。效果很好,但是我对错误检查的了解越多,我的正则表达式就越复杂。

这是我当前的正则表达式:

2

而txt文件是这样的:

\S+(\w+[0-9]) | \s+\w*[A-Z]

输出:

3
2 5 0
##start
0 1 2
##end
1 9 2
3 5 4
######################
###lol123
###1234124
#111shouldnotread#~!~
6ajhk 888 888 
D_c7 10 10
Enz4 11 11
Maf9 15 15
Eex5 18 18
U_e6 21 21
Nip5 25 25
Gw_5 28 28
Vio7 31 31
His7 34 34
Exh6 37 37
Iq_8 42 42
Qky2 45 45
Tac1 49 49
X__5 51 51
Xlb4 55 55
0-2
0-3
2-1
3-1
2-3

就目前而言,我已经获得了想要的一切,但还没有到位。您会看到,我有一些房间,但没有888 888 D_c7 Enz4 Maf9 Eex5 U_e6 Nip5 Gw_5 Vio7 His7 Exh6 Iq_8 Qky2 Tac1 X__5 Xlb4 的房间,这是我房间的名称,坐标为"6ajhk"。其余的已经单独处理。感谢您的时间和耐心。

2 个答案:

答案 0 :(得分:0)

我认为这应该做您想要的。

^([^\s#]{4,5}) (\d+) (\d+)

请参阅:https://regex101.com/r/Kqakb8/2

答案 1 :(得分:0)

如果我正确理解了您的要求,则此正则表达式似乎可以解决问题:

/^\w*(?!\n)(?=\s)/gm

请注意,我正在使用多行标记/m

您可以在这里进行测试:https://regexr.com/4arnh

编辑:如果您不想包括个位数的房间名称,则可以使用:

/^\w{2,}(?=[^\S\n])/gm

其中2是房间字符串中的最小字符数。此处演示:https://regexr.com/4arnq