常用表达

时间:2010-04-17 08:23:04

标签: regex

我需要一个正则表达式来寻找一个模式。 这是模式:
ID |名称|码|移动
如果我想按id搜索(如果id = 1),我为此创建了一个模式:

.*1.*|.*|.*|.*

但它匹配包含数字1的每个模式。 这有什么问题?

4 个答案:

答案 0 :(得分:3)

您需要在正则表达式中转义|符号,否则表示更改。如果您对正则表达式库是否需要它们有疑问,那么使用锚点也是一个好主意。此表达式匹配id​​:

中包含1的任何内容
^.*1.*\|.*\|.*\|.*$

要完全匹配id = 1,请将其更改为:

^1\|.*\|.*\|.*$

完全匹配name ='Foo':

^.*\|Foo\|.*\|.*$

评论中提出的一个好处是,最好使用[^|]*而不是.*来确保数据具有正确数量的管道符号。

请注意,如果需要进行多次查找,正则表达式将是一种查找数据的慢速方法。首先解析数据然后将它们存储在允许您快速查找的数据结构中(例如哈希表)会更快。

答案 1 :(得分:2)

我认为您的要求是ID必须以" 1"开头,所以我在Perl中创建了一个带有简单正则表达式的示例代码。随意提出更多问题。

my $pattern1="1|ee|ew|56";
my $pattern2="001|90|34|06";
my $pattern3="009|56|09|16";
my $pattern4="003|67|87|76";

if ($pattern1 =~ m/^1/){
print "Match Found for : $pattern1\n";
}
elsif ( $pattern2 =~ m/^1/){
print "Match Found for : $pattern2\n";
}
elsif ($pattern3 =~ m/^1/){
  print "Match Found for : $pattern3\n";
}
elsif ($pattern4 =~ m/^1/){
  print "Match Found for : $pattern4\n";
}
else{
  print "No Match Found";
}

答案 2 :(得分:1)

想想简单。不需要正则表达式。如果我认为你是正确的,你正在搜索id,比如1,并且由于你的数据有一个独特的分隔符,即(管道|),只需使用管道作为分隔符将数据分成单独的部分。最喜欢的语言并检查第一个元素(id)对1。例如

awk -F"|" '$1==1{print}' file

的Python

>>> s="1|John|code|mobile"
>>> if s.split("|")[0] == "1":
...  print "found"
...
found

应该有一些字符串拆分功能,您可以使用您的首选语言。

答案 3 :(得分:1)

您的一条评论:

  

谢谢,好,但是,我需要定期   表达,因为我正在努力   用Java解析文件,我知道它是   很奇怪,但我需要知道这个地方   搜索字符串所在的文件   开始。 :)

为什么不点击http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#split(java.lang.String)并使用ghostdog74建议的技巧。全线正则表达式对你想做的事情严重过分。