簡體   English   中英

Str.find()無法搜索“ \\ n”

[英]Str.find() unable to search for '\n'

我正在嘗試使用str.find()在兩個關鍵字之間提取文本。 但是它找不到'\\ n'的出現

text = 'Cardiff, the 6th November 2007\n company \n'
String_to_extract = '6th November 2007'
keywords = {'date': ['Cardiff, the ' , '\n']}

碼:

text2=text[text.find(keywords['date']0])+len(keywords[0]):text.find(keywords['date'][1])]
print(text2)

str.find() is unable to search for '\n', which results in no output

PS-只想使用str.find()方法

您錯誤地計算了第一個索引。 嘗試這個:

text = 'Cardiff, the 6th November 2007\n\n company \n\n'
keywords = ['Cardiff, the ', '\n']

result = text[text.find(keywords[0])+len(keywords[0]):text.find(keywords[1])]

輸出:

6th November 2007

這里有幾個問題:

  • keywords字典中,您使用的date變量應為字符串: 'date'
  • keywords字典中,您沒有對\\\\n兩次轉義,而沒有在text變量中這樣做。
  • 在索引計算中,您使用的key變量沒有定義在任何地方。 這應該是keywords字典中定義的'date'鍵。
  • 最后,您計算第一個索引的開始位置,而它應該是結束位置。

嘗試這個:

# String to be extracted = '6th November 2007'
text = 'Cardiff, the 6th November 2007\n\n \n\n'
keywords = {'date' : ['Cardiff, the ' , '\n\n']}

a = text.find(keywords['date'][0]) + len(keywords['date'][0])
b = text.find(keywords['date'][1])
text2 = text[a:b]
print(text2)

概括答案。 使用此代碼:

text2 = text[text.find(keywords[key][0])+len(keywords[key][0]):text.find(keywords[key][1])] # you can replace the key with whatever you want as keys

這是一個非常有趣的問題,它說明了如果以鏈式方式使用,瑣碎的事情可能會變得很難找到。 讓我們看看您的代碼中正在發生什么。 您說您的代碼似乎找不到第一個匹配項,但是,我想相反地指出,它肯定會找到第一個匹配項。 在文字'Cardiff, the 6th November 2007\\n\\n \\n\\n'您嘗試查找'Cardiff, the '的首次出現。 您將在文本中看到字符串的索引從索引0開始,即text[0] 因此這段代碼text[text.find(keywords[key][0]):text.find(keywords[key][1])]實質上就是text[0:text.find(keywords[key][1])] 現在在Python切片規則中,0是包含在內的,您將獲得類似於Cardiff, the 6th November 2007類的輸出Cardiff, the 6th November 2007並認為它沒有找到第一個匹配項。 因此,為了對其進行修復,您需要從'Cardiff, the '之后開始切片。 您可以通過以這種方式更改text2分配來實現:

text2 = text[text.find(keywords[key][0])+len(keywords[key][0]):text.find(keywords[key][1])]

還有其他方法可以實現您想要的,但這是您最初嘗試要做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM