0

例如我有一个字符串:

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|

4

5 回答 5

4

TrxId=(\d+)

这将给出一个具有 TrxId 的组 (1)。

PS:使用全局修饰符。

于 2012-12-26T12:34:17.360 回答
3

正则表达式应该看起来像这样:

TrxId=[0-9]+

它将匹配TrxId=后跟至少一位数字。

于 2012-12-26T12:34:05.023 回答
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'
于 2012-12-26T12:37:10.053 回答
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|

现在,显然这比其他一些答案更复杂,但它也更强大一点,因为它还允许您搜索更多键。

如果您的密钥出现多次,则此方法确实存在潜在问题。在这种情况下,很容易修改上面的代码来收集每个键的值的数组引用。

于 2012-12-26T12:48:37.313 回答
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

于 2012-12-26T12:49:38.240 回答