正则表达式使用数字过滤重复项目

时间:2013-05-28 13:51:54

标签: python regex

我有以下项目列表

list1=['test_input_1','test_input_2','test_input_3','test_input_10','test_input_11']

我需要以下输出 - test_input_1

for each in list1:
    string1 = each
    pattern = r'test_.*[1].*'
    match = re.search(pattern,string1)
    if match:
        print 'matched=', match.group()

Output-
matched= test_input_1
matched= test_input_10
matched= test_input_11

Expected Output-
matched= test_input_1

另外,'r'和&有什么区别?在模式之前'你'?

1 个答案:

答案 0 :(得分:2)

我不确定你的用例是什么,或者你想要做什么..你写的代码完全按照它应该做的那样....

您似乎无法正确理解正则表达式......

我会为你分解test_.*[1].* ......

  • test_:只是想在文中找到“test_”。
  • .*:这意味着任何字符(.)任意次数(*),这意味着它也可以为0。
  • [1]:这意味着组中的任何字符,因此在这种情况下,唯一给出的字符是1
  • .*:这意味着任何字符(.)任意次数(*),这意味着它也可以是0。 (再次)

因此,您获得test_input_1test_input_10test_input_11是有道理的,因为它们都遵循这种模式。


由于您只想捕获匹配test_input_1的模式,因此使用正则表达式是没有意义的......您只需将列表中的每个字符串与test_input_1进行比较。

for item in list1:
    if item == 'test_input_1':
        # you found it!
        print ("Found: test_input_1")

我不确定你要用这个来完成什么......

这样的事情可能对你有所帮助:

for idx, item in enumerate(list1):
    if item == 'test_input_1':
        print ('Found "test_input_1" at index %s' % idx)

但是如果你需要在正则表达式中做同样的想法,那么就像这样:

import re

def find_pattern(pattern, lst):
    regex = re.compile(pattern)
    for idx, item in enumerate(lst):
        match = regex.match(item)
        if not match:
            continue
        yield match.group(1), idx

list1=['test_input_1','test_input_2','test_input_3','test_input_10','test_input_11']
pat = r'(test_.*_1)\b'

for r in find_pattern(pat, list1):
    print 'found %s at index %s' % r

>>> 
found test_input_1 at index 0