如何在python中使用正則表達式從字符串中分離數值?

機器人鳥

我有一個混合了數字和單詞的字符串。我希望能夠從字符串中提取數值作為標記。

例如,

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']

請參閱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 組:數字/分數模式
  • ) - 外部捕獲組結束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中使用正則表達式從字符串中提取這些子字符串?

Julia - 使用正則表達式從字符串中提取數字

如何在replaceText中使用帶有正則表達式元字符的字符串作為正則表達式?

如何使用匹配和正則表達式從此字符串中提取精確值?

使用正則表達式從字符串中獲取序列 #Python #Regex

使用正則表達式從字符串中提取測量維度和數字

在 Python 中使用正則表達式更新字符串

C#正則表達式如何從字符串中排除

如何從正則表達式中的字符串中獲取特定文本

使用正則表達式從字符串中查找邏輯

如何使用正則表達式和字符串從文本中刪除所有問題?

如何使用正則表達式或任何 javascript 方法從字符串中獲取 url

正則表達式僅從字符串的數字部分提取前兩個字符

需要幫助使用正則表達式函數/修剪我的字符串

R從括號內的字符串中提取多個數字正則表達式

用於在數字之前從 csv 中提取字符串的正則表達式

在 Python 中使用正則表達式提取帶有替代項的子字符串

如何在 C++ 中使用正則表達式將十六進制顏色字符串轉換為 RGB

使用 Rust 正則表達式,如何在字符串前使用命名捕獲組?

如何在 BigQuery 中的數組中使用正則表達式

如何使用正則表達式獲取單個字符串中冒號後的值

使用 R 中的正則表達式從字符串中提取所有四個字符

如何使用正則表達式查找子字符串

如何使用正則表達式提取部分字符串

如何使用正則表達式在字符串中查找特定匹配項

如何使用正則表達式在字符串中查找重複的單詞

如何在oracle中使用正則表達式匹配包含特殊字符的文本

使用正則表達式從 html 字符串代碼中獲取驗證碼

從特定索引到字符串末尾的正則表達式是什麼?