我有一个正则表达式,但它并不适用于所有情况。
我需要它能够在两个深度级别内匹配以下任何情况:
如果单词“test_word”在语句中返回true
我一直在使用的是什么
('^/[^/]*/test_word/.+')
或
('^/test_word/.+')**
所以我在dirs的语句中匹配,例如:
/user/test_word
/test_word
/test_word/test_word/
但在此示例中为false,因为它超出了两个级别。对于超出两个级别的任何事情,我不想要积极的
/something/something/test_word/
任何你能想到的事情都可能发生。
答案 0 :(得分:2)
答案 1 :(得分:1)
假设这是python 2.7(没有使用3)你真的不需要任何库只是内置字符串函数这就是我接近它的方式:
testword = "test_word"
stringToCheck = "/something/something/TeSt_wOrD/"
def testForWord(string):
if testword in string.lower(): return True
else: return False
print testForWord(stringToCheck)
正如您所看到的,它会检查任何情况,因为它只是检查所有情况都是小写的。我不是100%确定你是否需要,但我认为应该这样做:D。
答案 2 :(得分:1)
怎么样:
lines = '''\
/user/test_word
/test_word
/test_word/test_word/
/something/something/test_word/
/user/test_word/
/test_word/
/test_word/test_word
/something/something/test_word
/user/test_word/more
/test_word/more
/test_word/test_word/more
/something/something/test_word/more
/something/test_word/test_word
/test_wordxx
/something/test_wordxx
'''.splitlines()
import re
for line in lines:
if re.match('/(?:[^/]+/)?test_word(?:/|$)',line):
print('YES',line)
else:
print('NO ',line)
输出:
YES /user/test_word
YES /test_word
YES /test_word/test_word/
NO /something/something/test_word/
YES /user/test_word/
YES /test_word/
YES /test_word/test_word
NO /something/something/test_word
YES /user/test_word/more
YES /test_word/more
YES /test_word/test_word/more
NO /something/something/test_word/more
YES /something/test_word/test_word
NO /test_wordxx
NO /something/test_wordxx
不确定你是否希望第三名能够持续第三名。
答案 3 :(得分:1)
我建议你不要在这种情况下使用正则表达式。你想要的是部分完美匹配而不是模式匹配,因此浪费了计算资源。你可以简单地做到这一点:
import os
filepath = #init
hier = filepath.split(os.path.sep)
print 'right' if hier[1] == 'test_word' or hier[2] == 'test_word' else 'wrong'
答案 4 :(得分:0)
2级
^/(?:[^/\r\n]*/){0,1}test_word(?:/|$)
扩展:
^
/
(?: [^/\r\n]* / ){0,1}
test_word
(?: / | $ )
对于N级(> = 2)
^/(?:[^/\r\n]*/){0,N-1}test_word(?:/|$)
扩展:
^
/
(?: [^/\r\n]* / ){0,N-1}
test_word
(?: / | $ )