[英]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經驗,所以我無法直接回答您的問題。 但是,如果您希望子字符串以匹配開頭,為什么不匹配其余字符串或刪除匹配之前的所有內容呢?
匹配foreign currenc(y|ies)
然后匹配字符串中的每個其他字符。 我使用了s
修飾符,以便點也與新行匹配。
foreign\s+currenc(?:y|ies).*
將此表達式替換為空的String。 這將使所有內容延遲匹配,直到匹配foreign currenc(y|ies)
的前瞻為止。
.*?(?=foreign\s+currenc(?:y|ies))
注:我改變(currency|currencies)
,以currenc(?:y|ies)
因為它會更有效 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.