我需要帮助,
typealias JSONDict = [String: Any]
class BaseItem: NSObject {
class var apiName: String { return "n/a" }
init?(json: JSONDict) {
// I need to access dynamic type before super.init().
// I can only access current type statically.
print("api name before: " + BaseItem.apiName)
// Prints "n/a", I need it to print "book".
super.init()
// This correctly prints "book".
print("api name: " + type(of: self).apiName)
}
}
class Book: BaseItem {
override class var apiName: String { return "book" }
}
let b = Book(json: [:])
输出:
list1 = [abc, xyz]
我正在使用以下代码:
123
143
153
abc!
abc
hhj
xyz--
xyz
以上代码不适合我的要求
注意它不应该为abc!和xyz--意思是它必须只匹配abc和xyz
答案 0 :(得分:0)
虽然您的问题非常明确,但缺少 mcve 。如果您想检查拥有,如果line
与list1
内的内容相同,则可以使用in
运算符。
if line in list1:
print "abc or xyz present in output"
在您的情况下,它应匹配两次,一次用于abc
,一次用于xyz
。既然你说:
注意它不应该为abc!和xyz -
注意:正则表达式用于搜索字符串中的模式。不太适合你的任务。
答案 1 :(得分:0)
猜测你想搜索每个输出行是否在list1中? 看看这个你不需要正则表达式
list1 = ['abc', 'xyz']
output='''123
143
153
abc!
abc
hhj
xyz--
xyz'''
for line in output.split("\n"):
line = line.strip()
if line in list1:
print line,"present in output"
输出:
abc出现在输出中 xyz出现在输出
中
答案 2 :(得分:0)
如果您仍想使用正则表达式,可以使用:
import re
output = """123
143
153
abc!
abc
hhj
xyz--
xyz"""
print(output)
for line in output.split("\n"):
line = line.strip()
if re.search(r"^\babc\b$", line) or re.search(r"^\bxyz\b$", line):
print('line matched: {}'.format(line))
但是,我会创建一个单独的字典并在那里查找匹配项:
keywords = {'abc' : 0, 'xyz' :0, ...}
for line in output.split("\n"):
if line in keywords:
print('line matched: {}'.format(line))
如果你有很多关键词并且它们都是唯一的并且你的output
文件包含很多行,那么词典是有意义的。查找时间将是常量O(1)。
如果使用关键字列表,则查找将为O(n),这使得算法总计为O(n ^ 2)。