我有以下项目列表
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'和&有什么区别?在模式之前'你'?
答案 0 :(得分:2)
我不确定你的用例是什么,或者你想要做什么..你写的代码完全按照它应该做的那样....
您似乎无法正确理解正则表达式......
我会为你分解test_.*[1].*
......
test_
:只是想在文中找到“test_”。.*
:这意味着任何字符(.
)任意次数(*
),这意味着它也可以为0。[1]
:这意味着组中的任何字符,因此在这种情况下,唯一给出的字符是1
。.*
:这意味着任何字符(.
)任意次数(*
),这意味着它也可以是0。 (再次)因此,您获得test_input_1
,test_input_10
和test_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