我是python的新手,正在寻找帮助从字符串数组中提取标签的帮助。假设我有['python', 'c#', 'java', 'f#' ]
然后输入"I love Java and python"
的字符串。
输出应为数组['java', 'python']
感谢您的帮助。
答案 0 :(得分:4)
import re
stringarray = ['python', 'c#', 'core java', 'f#' ]
string = "I love Core Java and python"
pattern = '|'.join(stringarray)
output = re.findall(pattern, string.lower())
# ['core java', 'python']
stringarray = ['python', 'c#', 'core java', 'f#' ]
string = "I love Core Java and python"
output = [i for i in stringarray if i in string.lower()]
# ['core java', 'python']
stringarray = ['python', 'c#', 'java', 'f#' ]
string = "I love Java and python"
output = list(set(string.lower().split()).intersection(stringarray))
# ['java', 'python']
简短说明::通过执行string.lower().split()
,默认情况下(空白),将输入字符串中的单词分解为小写。通过将其转换为集合,我们可以访问集合函数交集。相交将依次找到两个集合中的事件。最后,我们将其包装在列表中以获得所需的输出。如Joe Iddon所评论,这将不会返回重复的标签。
您对计数感兴趣吗?考虑使用collections计数器和dict理解:
from collections import Counter
count = {k:v for k,v in Counter(string.lower().split()).items() if k in stringarray}
print(count)
#{'java': 1, 'python': 1}
答案 1 :(得分:3)
您可以使用以下列表推导,将字符串转换为小写字母,然后遍历每个单词(使用split
之后),然后返回数组中的单词:
arr = ['python', 'c#', 'java', 'f#' ]
s = "I love Java and python"
outp = [i for i in s.lower().split() if i in arr]
>>> outp
['java', 'python']
或者您可以使用正则表达式:
import re
arr = ['python', 'c#', 'java', 'f#' ]
s = "I love Java and python"
outp = re.findall('|'.join(arr),s.lower())
>>> outp
['java', 'python']
答案 2 :(得分:2)
将标签列表变成一组,因此查找是普通情况下的O(1)
查找,然后使用列表理解来执行O(1)
标签搜索。
def extract(string, tags):
tags = set(tags)
return [w for w in string.lower().split() if w in tags]
和测试:
>>> extract('I love Java and python', ['python', 'c#', 'java', 'f#' ])
['java', 'python']