2017-03-17 55 views
1

我是新來的Python
我想在Python中提取特定模式3.5
模式:數字字符位數
字符可以是* + -/X X

如何提取特定的模式在Python

我該怎麼做?

我試圖使用pattern [0-9 \ */+ - xX \ 0-9],但它返回字符串中存在的任何字符。

例如:2 * 3或2×3或2 + 3或2-3亦宜
但asdXyz不應

+0

請提供一些有效的範例。 –

+0

我覺得你可以做'[0-9] [\ * + -/xX] [0-9]'。 – ForceBru

回答

2

您可以使用

[0-9][*+/xX-][0-9] 

或整個字符串匹配:

^[0-9][*+/xX-][0-9]$ 

在Python 3.x中,你可以丟棄,如果^(字符串錨開始)和$(字符串錨結束)您使用re.fullmatchdemo)模式:

if re.fullmatch(r'[0-9][*+/xX-][0-9]', '5+5'): 
    print('5+5 string found!') 
if re.fullmatch(r'[0-9][*+/xX-][0-9]', '5+56'): 
    print('5+56 string found!') 
# => 5+5 string found! 
+1

regex = r「[0-9] [* +/xX - ] [0-9]」這工作。讓我做一些測試。非常感謝:) –

+0

好吧,我明白了,我刪除了不必要的答案部分。順便說一句,你的模式只是匹配來自定義的集合/範圍的單個字符。根據您使用的方法,可能會有不同的匹配方案,但問題是您將所有內容都放入單個字符類中。 –

1

re.match()功能將限制搜索的開始和結束的字符串,以防止誤報。

  • 一個數字可以與\d匹配。
  • 操作員可以與[x/+\-]相匹配的x正好一個,/+,或-(其被轉義,因爲它是一個正則表達式的特殊字符)的匹配。
  • 最後一位數字可以與\d匹配。
  • 在每個零件周圍放置括號可以將零件提取爲獨立的子組。

例如:

>>> re.match(r'(\d)([x/+\-])(\d)', '3/4').groups() 
('3', '/', '4')