我有一个名为“beats”的二维数组,带有一堆数据。在数组的第二列中,有一个按字母顺序排列的单词列表。
我还有一个名为“words”的句子,原本是一个字符串,我把它变成了一个数组。
我需要检查“单词”中的一个单词是否与数组“beats”的第二列中的任何单词匹配。如果找到了匹配项,程序会将句子“words”中的匹配单词更改为“match”,然后返回字符串中的单词。这是我正在使用的代码:
i = 0
while i < len(words):
n = 0
while n < len(beats):
if words[i] == beats[n][1]:
words[i] = "match"
n = n + 1
i = i + 1
mystring = ' '.join(words)
return mystring
所以,如果我有这句话:
"Money is the last money."
“money”位于数组“beats”的第二列,结果将是:
"match is the last match."
但由于“匹配”背后有一段时间,因此不认为是匹配。
比较两个字符串时有没有办法忽略标点符号?我不想删除标点符号的句子,因为当我的程序完成替换匹配后,当我返回字符串时,我希望标点符号是完整的。
答案 0 :(得分:1)
您可以创建一个具有所需属性的新字符串,然后与新字符串进行比较。除了数字,字母和空格之外,这将删除所有字母,而所有字母都是小写的。
''.join([letter.lower() for letter in ' '.join(words) if letter.isalnum() or letter == ' '])
要从字符串中删除除字母之外的所有内容,您可以执行以下操作:
from string import ascii_letters
''.join([letter for letter in word if letter in ascii_letters])
答案 1 :(得分:1)
您可以使用正则表达式:
import re
st="Money is the last money."
words=st.split()
beats=['money','nonsense']
for i,word in enumerate(words):
if word=='match': continue
for tgt in beats:
word=re.sub(r'\b{}\b'.format(tgt),'match',word,flags=re.I)
words[i]=word
print print ' '.join(words)
打印
match is the last match.
答案 2 :(得分:0)
如果它只是您担心的全程停止,那么您可以添加另一个if case以匹配它。或者类似,如果您的案例有限,您可以添加自定义处理。或其他正则表达式是要走的路。
words="Money is the last money. This money is another money."
words = words.split()
i = 0
while i < len(words):
if (words[i].lower() == "money".lower()):
words[i] = "match"
if (words[i].lower() == "money".lower() + '.'):
words[i] = "match."
i = i + 1
mystring = ' '.join(words)
print mystring
输出:
match is the last match. This match is another match.