我有一個混合了數字和單詞的字串。我希望能夠從字串中提取數值作為標記。
例如,
input
str = "Score 1 and 2 sometimes, often 1 and 1/2, or 2.5 or 3 and 1/3." should ideally
output,
Score -> word
1 -> number
and -> word
2 -> number
...
1 and 1/2 -> number (this group should stay together as number)
or -> word
2.5 -> number
...
3 and 1/3 -> number
我可以通過如下使用正則運算式來部分解決問題,
rule 1:
re.findall(r'\s*(\d*\.?\d )\s*', str1) and
rule 2:
re.findall(r'(?:\s*\d* and \d \/\d \s*)', str1)
它部分有效。我無法將這些放在一起來解決問題。我試過這個,
re.findall(r'(?:\s*(\d*\.?\d )\s*)|(?:\s*\d* and \d \/\d \s*)', str1)
任何人都可以請幫助并展示我如何將規則放在一起并獲得結果?
uj5u.com熱心網友回復:
您可以使用
import re
text = "Score 1 and 2 sometimes, often 1 and 1/2, or 2.5 or 3 and 1/3."
matches = re.findall(r'((\d*\.?\d (?:\/\d*\.?\d )?)(?:\s and\s (\d*\.?\d (?:\/\d*\.?\d )?))?)', text)
result = []
for x,y,z in matches:
if '/' in x:
result.append(x)
else:
result.extend(filter(lambda x: x!="", [y,z]))
print( result )
# => ['1', '2', '1 and 1/2', '2.5', '3 and 1/3']
請參閱Python 演示。這是正則運算式演示。
細節:
- 正則運算式包含三個捕獲組,圍繞它作為一個整體,以及兩個包裹數字或分數模式的組。
- 獲得匹配項后,將帶有
/char的一個放入result,或者將另外兩個捕獲為單獨的專案。
正則運算式 par 匹配
(- 外部捕獲組開始(組 1):(\d*\.?\d (?:\/\d*\.?\d )?)- 第 2 組:數字/分數模式:零個或多個數字,一個可選的.,一個或多個數字,然后是一個/字符的可選出現,然后是零個或多個數字,一個可選的.,一個或多個數字(?:\s and\s (\d*\.?\d (?:\/\d*\.?\d )?))?- 一個可選的出現\s and\s-and周圍有一個或多個空格的單詞(\d*\.?\d (?:\/\d*\.?\d )?)- 第 3 組:數字/分數模式
)- 外部捕獲組結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365674.html
上一篇:將文本標記與單詞串列匹配
下一篇:根據子串的長度過濾一維字符向量
