正则表达式帮助:捕获这个:| TrxId = 475665 |

时间:2012-12-26 12:32:15

标签: regex

例如我有一个字符串:

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|

5 个答案:

答案 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