我试图用一个约束提取单词[a-zA-Z]+
:一个单词必须包含至少一个小写字母和至少一个大写字母(在单词内的任何位置)。示例:如果输入为hello 123 worLD
,则唯一匹配应为worLD
。
我尝试使用这样的积极前瞻:
echo "hello 123 worLD" | grep -oP "(?=.*[a-z])(?=.*[A-Z])[a-zA-Z]+"
hello
这是不正确的:唯一的匹配是hello
而不是worLD
。然后我尝试了这个:
echo "hello 123 worLD" | grep -oP "\K((?=.*[a-z])(?=.*[A-Z])[a-zA-Z]+)"
hello
worLD
这仍然不正确:hello
不应匹配。
答案 0 :(得分:4)
前瞻中的.*
不仅检查相邻单词中的字母存在,还检查字符串后面的字母存在。使用[a-zA-Z]*
:
echo "hello 123 worLD" | grep -oP "\\b(?=[A-Za-z]*[a-z])(?=[A-Za-z]*[A-Z])[a-zA-Z]+"
请参阅demo online
我还在开头添加了一个单词边界\b
,以便仅在单词边界之后执行超前检查。
答案 1 :(得分:1)
答案:
import MySQLdb
import sys
if len(sys.argv) != 4:
print "please enter the Hostname to connect followed by:"
print "mysql username;"
print "mysql db to connect;"
else:
_host = sys.argv[1]
_user = sys.argv[2]
# _pass = sys.argv[3]
_db = sys.argv[3]
cham = raw_input("please enter the command to be executed:- ")
_pass = raw_input("please enter password:- ")
if cham == "drop table":
db = MySQLdb.connect(host = _host, user = _user,db = _db, passwd = _pass )
cursor = db.cursor()
cursor.execute("show tables")
for i in cursor.fetchall():
cursor.execute("drop table" + " " + (i[0]))
print cursor.fetchall()
print "all the tables has been deleted"
db.close()
else:
db = MySQLdb.connect(host = _host, user = _user,db = _db, passwd = _pass )
cursor = db.cursor()
cursor.execute(cham)
print cursor.fetchall()
db.close()
<强>解释强>
首先检查单词是以一个或多个大写字母后跟一个小写字母开头,反之亦然,后跟任意顺序的任意数量的小写和大写字母。
<强>性能:强>
This solution需要31步才能在提供的测试字符串上达到匹配,而accepted solution需要47步。