我需要一个正则表达式来寻找一个模式。
这是模式:
ID |名称|码|移动
如果我想按id搜索(如果id = 1),我为此创建了一个模式:
.*1.*|.*|.*|.*
但它匹配包含数字1的每个模式。 这有什么问题?
答案 0 :(得分:3)
您需要在正则表达式中转义|
符号,否则表示更改。如果您对正则表达式库是否需要它们有疑问,那么使用锚点也是一个好主意。此表达式匹配id:
^.*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。例如
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建议的技巧。全线正则表达式对你想做的事情严重过分。