簡體   English   中英

使用正則表達式提取字符串位置Python

[英]Using regex to extract string position Python

我正在嘗試使用正則表達式提取子字符串的位置(索引)。 我需要使用正則表達式,因為字符串不會完全相同。 我想獲取子字符串的位置(開始位置或結束位置),因此我可以在該子字符串后面取1,000個字符。

例如,如果我有“雖然外匯交易頻繁,但大多數人卻賺很少的錢”。 我想找到“外國貨幣”的頭寸,這樣我可以得到所有的話。

f5是文本。

我試過了:

p = re.compile("((^\s*|\.\s*)foreign\s*(currency|currencies))?")
for m in p.finditer(f5):
    print m.start(), m.group()

獲取位置。 即使我已檢查以確保正則表達式能提取文本中要查找的內容,這也給了我(0,0)。

我也嘗試過:

location = re.search(r"((^\s*|\.\s*)foreign\s*(currency|currencies))?", f5)
print location

輸出為<_sre.SRE_Match at 0x297d3328>

如果我嘗試

location.span() 

我又得到(0,0)。

基本上,我想將<_sre.SRE_Match at 0x297d3328>轉換為一個給出搜索詞位置的整數。

我花了半天時間尋找解決方案。 謝謝你的幫助。

您的模式包括“外國”一詞之前的所有內容。 因此,python會考慮匹配的那部分。 如果您想丟棄它,只需將其從搜索字符串中刪除。

嘗試:

 p = re.compile('foreign\s+(currency|currencies)?')
 m = p.search(s)
 m.start()

這也適用於finditer

 for m in p.finditer(s):
     m.start()

除了以前的解決方案/評論之外,如果您想在后面加上所有單詞,則可以執行以下操作:

>>> location = re.search(r".*foreign\s*currenc(y|ies)(.*)", f5)
>>> location.group(2)
' are traded frequently, very little money is made by most.'

.group(2)部分與正則表達式中的(.*)匹配。

沒有大量的Python經驗,所以我無法直接回答您的問題。 但是,如果您希望子字符串以匹配開頭,為什么不匹配其余字符串或刪除匹配之前的所有內容呢?

范例1:

匹配foreign currenc(y|ies)然后匹配字符串中的每個其他字符。 我使用了s修飾符,以便點也與新行匹配。

foreign\s+currenc(?:y|ies).*

范例2:

將此表達式替換為空的String。 這將使所有內容延遲匹配,直到匹配foreign currenc(y|ies)的前瞻為止。

.*?(?=foreign\s+currenc(?:y|ies))

注:我改變(currency|currencies) ,以currenc(?:y|ies)因為它更有效

暫無
暫無

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

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