簡體   English   中英

如何使用正則表達式從python中的字符串中提取不同類型的子字符串?

[英]How to extract different types of sub-strings from a string in python using regular expression?

作為標題,我應該從如下所示的字符串中獲取一些子字符串:“-23/45 + 14/9”。 我需要從那個字符串中得到四個數字和中間的運算符。 讓我困惑的是如何只使用一種正則表達式模式來做到這一點。 以下是要求:

編寫一個正則表達式 patt,可用於從包含分數、算術運算符和分數的字符串中提取(分子、分母、運算符、分子、分母)。 您可以假設算術運算符前后有一個空格,並且分數中的 / 字符周圍沒有空格。 所有分數都會有分子和分母。 例子:

>>> s = "-23/45 + 14/9"
>>> re.findall(patt,s)
[( "-23","45","+","14","49")]
>>> s = "-23/45 * 14/9"
>>> re.findall(patt,s)
[( "-23","45","*","14","49")]

通常,您的代碼應該處理任何運算符 +、-、* 和 /。 注意:算術(和其他)運算符的兩個參數函數等價物的運算符模塊

我的問題是如何只使用一個正則表達式來做到這一點。 我曾想過讓子字符串包含數字並在任何不是數字的字符處停止,但這會錯過中間的運算符。 另一個想法是包含所有運算符(+ - * /)並在空格處停止,但這將使第一個和最后兩個數字成為一起。 誰能給我一個方向,如何只用一個正則表達式模式解決這個問題? 非常感謝!

試試這個正則表達式:

(-?\d+)\s*\/\s*(\d+) *([+*\/-])\s*(-?\d+)\s*\/(\d+)

點擊查看正則表達式演示

您可以從第 1 組到第 5 組中提取所需的信息

解釋:

  • (-?\\d+) - 匹配一個可選的-后跟 1+ 次出現的數字並在第 1 組中捕獲它
  • \\s*\\/\\s* - 匹配 0+ 次出現的空格后跟一個/后跟 0+ 次出現的空格
  • (\\d+) - 匹配 1+ 次出現的數字並在第 2 組中捕獲它
  • * - 匹配 0+ 次出現的空格
  • ([+*\\/-]) - 匹配+-/*中的運算符之一並在組 3 中捕獲它
  • \\s* - 匹配 0+ 次出現的空格
  • (-?\\d+) - 匹配一個可選的-后跟 1+ 次出現的數字並在第 4 組中捕獲它
  • \\s*\\/ - 匹配 0+ 個空格后跟/
  • (\\d+) - 匹配 1+ 次出現的數字並將其捕獲在第 5 組中

暫無
暫無

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

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