我想在程序的输出日志上进行正则表达式匹配(在Python中).日志包含一些如下所示的行:
...
VALUE 100 234 568 9233 119
...
VALUE 101 124 9223 4329 1559
...
Run Code Online (Sandbox Code Playgroud)
我想捕获在以VALUE开头的第一次出现之后发生的数字列表.即,我希望它返回('100','234','568','9233','119').问题是我事先并不知道会有多少数字.
我试图用这个作为正则表达式:
VALUE (?:(\d+)\s)+
Run Code Online (Sandbox Code Playgroud)
这匹配线,但它只捕获最后一个值,所以我得到('119',).
为什么以下代码会导致:
'the'有1场比赛
并不是:
'the'共有3场比赛
using System;
using System.Text.RegularExpressions;
namespace TestRegex82723223
{
class Program
{
static void Main(string[] args)
{
string text = "C# is the best language there is in the world.";
string search = "the";
Match match = Regex.Match(text, search);
Console.WriteLine("there was {0} matches for '{1}'", match.Groups.Count, match.Value);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我必须从ASCII文本文件中解析一些表.这是一个部分样本:
QSMDRYCELL 11.00 11.10 11.00 11.00 -.90 11 11000 1.212
RECKITTBEN 192.50 209.00 192.50 201.80 5.21 34 2850 5.707
RUPALIINS 150.00 159.00 150.00 156.25 6.29 4 80 .125
SALAMCRST 164.00 164.75 163.00 163.25 -.45 80 8250 13.505
SINGERBD 779.75 779.75 770.00 773.00 -.89 8 95 .735
SONARBAINS 68.00 69.00 67.50 68.00 .74 11 3050 2.077
Run Code Online (Sandbox Code Playgroud)
该表由1列文本和8列浮点数组成.我想通过正则表达式捕获每一列.
我对正则表达式很新.这是我提出的错误的正则表达式模式:
(\S+)\s+(\s+[\d\.\-]+){8}
Run Code Online (Sandbox Code Playgroud)
但该模式仅捕获第一列和最后一列.RegexBuddy也会发出以下警告:
您重复了捕获组本身.该组将仅捕获最后一次迭代.在重复组周围放置捕获组以捕获所有迭代.
我已经咨询了他们的帮助文件,但我不知道如何解决这个问题.
如何单独捕获每列?
当模式在一行中多次匹配时,如何对所有匹配的组执行操作?
为了说明,我想搜索/Hello! (\d+)/并使用数字,例如,打印出来或将它们相加,以便输入
abcHello! 200 300 Hello! Hello! 400z3
ads
Hello! 0
Run Code Online (Sandbox Code Playgroud)
如果我决定将它们打印出来,我会期待它的输出
200
400
0
Run Code Online (Sandbox Code Playgroud) 当我运行此代码时:
$_='xaxbxc';
if(/(x(?<foo>.))+/) {
say "&: ", $&;
say "0: ", $-{foo}[0];
say "1: ", $-{foo}[1];
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
&: xaxbxc
0: c
1:
Run Code Online (Sandbox Code Playgroud)
我知道这是它应该如何工作,但我希望能够以某种方式得到所有匹配的列表('a', 'b', 'c')而不是最后一个匹配(c).我怎样才能做到这一点?
在阅读了这个类似的问题并多次尝试我的代码之后,我继续获得相同的不良输出.
让我们假设我正在搜索的字符串是"我昨天看到了wilma".正则表达式应该捕获每个单词后跟一个'a'及其可选的 5个后面的字符或空格.
我写的代码如下:
$_ = "I saw wilma yesterday";
if (@m = /(\w+)a(.{5,})?/g){
print "found " . @m . " matches\n";
foreach(@m){
print "\t\"$_\"\n";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我继续获得以下输出:
found 2 matches
"s"
"w wilma yesterday"
Run Code Online (Sandbox Code Playgroud)
虽然我希望得到以下一个:
found 3 matches:
"saw wil"
"wilma yest"
"yesterday"
Run Code Online (Sandbox Code Playgroud)
直到我发现里面的返回值@m是$1和$2,你可以注意到.
现在,由于/g标志已打开,我认为问题不在于正则表达式,我怎样才能获得所需的输出?
我有一个 .txt 文件,其中一列中包含数据,如下所示:
state_1
state_2
state_3
input_11
input_12
input_13
input_21
input_22
input_31
Run Code Online (Sandbox Code Playgroud)
我想根据这些标签的名称和编号将它们分组为哈希:
state_1: # For state_1, we have all "input1x" data tags
-input_11
-input_12
-input_13
state_2: # For state_2, we have all "input2x" data tags
-input_21
-input_22
state_3: # For state_3, we have all "input3x" data tags
-input_31
Run Code Online (Sandbox Code Playgroud)
我尝试使用本例中的push函数来尝试将值作为数组强制放入哈希中,但我一直在寻找一种循环方法并根据正则表达式获取所需的哈希。push @{ $state{$inputs} }, $_;
我还研究了如何根据 regex 对数据进行分组,但是当我从 .txt 文件获取数据时,我仍然找不到对数据进行分组的方法。
我的问题是,我需要什么才能对这些标签进行相应的分组?