我有一個混合了數字和單詞的字符串。我希望能夠從字符串中提取數值作為標記。
例如,
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)
任何人都可以請幫助並展示我如何將規則放在一起並獲得結果?
您可以使用
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']
細節:
/
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 組:數字/分數模式)
- 外部捕獲組結束。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句