例如我有一个字符串:
MsgNam=WMS.WEATXT|VersionsNr=0|TrxId=475665|MndNr=0257|Werk=0000|WeaNr=0171581054|WepNr=|WeaTxtTyp=110|SpraNam=ru|WeaTxtNr=2|WeaTxtTxt=100 111|
我想抓住这个:|TrxId=475665|
在TrxId=
之后它可以是任何数字和任意数量的,所以正则表达式也应该抓住:
|TrxId=111333|
以及|TrxId=0000011112222|
和|TrxId=123|
答案 0 :(得分:4)
TrxId=(\d+)
这将为组(1)提供TrxId。
PS:使用全局修饰符。
答案 1 :(得分:3)
正则表达式应该看起来像这样:
TrxId=[0-9]+
它将匹配TrxId=
,后跟至少一位数。
答案 2 :(得分:1)
Python中的示例解决方案:
In [107]: data = 'MsgNam=WMS.WEATXT|VersionsNr=0|TrxId=475665|MndNr=0257|Werk=0000|WeaNr=0171581054|WepNr=|WeaTxtTyp=110|SpraNam=ru|WeaTxtNr=2|WeaTxtTxt=100 111|'
In [108]: m = re.search(r'\|TrxId=(\d+)\|', data)
In [109]: m.group(0)
Out[109]: '|TrxId=475665|'
In [110]: m.group(1)
Out[110]: '475665'
答案 3 :(得分:0)
你知道你的分隔符是什么样的,所以你不需要正则表达式,你需要split
。这是Perl中的一个实现。
use strict;
use warnings;
my $input = "MsgNam=WMS.WEATXT|VersionsNr=0|TrxId=475665|MndNr=0257|Werk=0000|WeaNr=0171581054|WepNr=|WeaTxtTyp=110|SpraNam=ru|WeaTxtNr=2|WeaTxtTxt=100 111|";
my @first_array = split(/\|/,$input); #splitting $input on "|"
#Now, since the last character of $input is "|", the last element
#of this array is undef (ie the Perl equivalent of null)
#So, filter that out.
@first_array = grep{defined}@first_array;
#Also filter out elements that do not have an equals sign appearing.
@first_array = grep{/=/}@first_array;
#Now, put these elements into an associative array:
my %assoc_array;
foreach(@first_array)
{
if(/^([^=]+)=(.+)$/)
{
$assoc_array{$1} = $2;
}
else
{
#Something weird may be happening...
#we may have an element starting with "=" for example.
#Do what you want: throw a warning, die, silently move on, etc.
}
}
if(exists $assoc_array{TrxId})
{
print "|TrxId=" . $assoc_array{TrxId} . "|\n";
}
else
{
print "Sorry, TrxId not found!\n";
}
上面的代码产生了预期的输出:
|TrxId=475665|
现在,显然这比其他一些答案更复杂,但它也更健壮,因为它允许你搜索更多的键。
如果您的密钥出现多次,则此方法确实存在潜在问题。在这种情况下,修改上面的代码很容易收集每个密钥的array reference值。
答案 4 :(得分:0)
/MsgNam\=.*?\|(TrxId\=\d+)\|.*/
例如在perl中:
$a = "MsgNam=WMS.WEATXT|VersionsNr=0|TrxId=475665|MndNr=0257|Werk=0000|WeaNr=0171581054|WepNr=|WeaTxtTyp=110|SpraNam=ru|WeaTxtNr=2|WeaTxtTxt=100111|";
$a =~ /MsgNam\=.*?\|(TrxId\=\d+)\|.*/;
print $1;
将打印TrxId = 475665