Return 字符串中 any() 列表中的匹配值
Return matched value in any() list in string
我有以下脚本
#Tails every new line created in this file
for line in tailer.follow(open("my/path/chatlog.html")):
#If the new line has the word "TURN" on it, continue
if("TURN" in line):
#IF any of the names in the list characterNames is in the new line, execute the function parseCharacter passing the matched "name"
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
最后一行的"name"是我需要匹配的行中的匹配名称。我试图查看 any() 文档,但找不到解决方案。
提前致谢。
改变这个:
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
为此:
try:
bingo = next(name for name in characterNames if name in line.lower()):
except StopIteration: # none found
# break \ continue ?
else:
parseCharacter(charactersPath + bingo + ".xml")
any()
通过迭代器试图找到 any 值 returns True
但不告诉你它是哪一个.
next()
只会 return 下一个 值 return 的 True
。这里的问题是可能有多个这样做。如果你想获得它们,请不要使用 next
all.
最后,请注意 next()
也可以采用默认参数,以防万一找不到任何内容。你可能想用那个。如果这样做,则不需要 except
部分。它在内部处理。
在
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
name
只在括号内有效。之后名称不再定义。
您必须手动浏览列表:
for name in characterNames:
if name in line.lower():
parseCharacter(charactersPath + name + ".xml")
只需将 any 更改为列表推导中的列表循环即可:
for name in [name for name in characterNames if name in line.lower()]:
parseCharacter(charactersPath + name + ".xml")
我有以下脚本
#Tails every new line created in this file
for line in tailer.follow(open("my/path/chatlog.html")):
#If the new line has the word "TURN" on it, continue
if("TURN" in line):
#IF any of the names in the list characterNames is in the new line, execute the function parseCharacter passing the matched "name"
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
最后一行的"name"是我需要匹配的行中的匹配名称。我试图查看 any() 文档,但找不到解决方案。
提前致谢。
改变这个:
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
为此:
try:
bingo = next(name for name in characterNames if name in line.lower()):
except StopIteration: # none found
# break \ continue ?
else:
parseCharacter(charactersPath + bingo + ".xml")
any()
通过迭代器试图找到 any 值 returnsTrue
但不告诉你它是哪一个.next()
只会 return 下一个 值 return 的True
。这里的问题是可能有多个这样做。如果你想获得它们,请不要使用next
all.
最后,请注意 next()
也可以采用默认参数,以防万一找不到任何内容。你可能想用那个。如果这样做,则不需要 except
部分。它在内部处理。
在
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
name
只在括号内有效。之后名称不再定义。
您必须手动浏览列表:
for name in characterNames:
if name in line.lower():
parseCharacter(charactersPath + name + ".xml")
只需将 any 更改为列表推导中的列表循环即可:
for name in [name for name in characterNames if name in line.lower()]:
parseCharacter(charactersPath + name + ".xml")