【问题标题】:How to extract specific pattern in Python如何在 Python 中提取特定模式
【发布时间】:2026-02-05 03:55:01
【问题描述】:

我是 python 新手
我想在 python 3.5 中提取特定模式
模式:数字字符数字
字符可以是 * + - / x X

我该怎么做?

我尝试使用模式 [0-9\*/+-xX\0-9] 但它返回字符串中存在的任何一个字符。

示例:应匹配 2*3 或 2x3 或 2+3 或 2-3
但 asdXyz 不应该

【问题讨论】:

  • 请提供一些有效的例子。
  • 我认为你可以这样做[0-9][\*+-/xX][0-9]

标签: python regex python-3.x pattern-matching


【解决方案1】:

你可以使用

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

或者匹配整个字符串:

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

在 Python 3.x 中,如果您使用 re.fullmatch (demo) 中的模式,您可以丢弃 ^(字符串锚点的开始)和 $(字符串锚点的结束):

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!

【讨论】:

  • regex = r"[0-9][*+/xX-][0-9]" 这行得通。让我做一些测试。非常感谢:)
  • 好的,我明白了,我删除了不必要的答案部分。顺便说一句,您的模式只匹配定义的集合/范围中的单个字符。根据您使用的方法,可能会有不同的匹配场景,但问题是您将所有内容都放在了单个字符类中。
【解决方案2】:

re.match() 函数会将搜索限制在字符串的开头和结尾,以防止误报。

  • 一个数字可以与\d匹配。
  • 运算符可以与[x/+\-] 匹配,它与x/+- 中的一个完全匹配(因为它是一个特殊的正则表达式字符而被转义)。
  • 最后一位可以与\d匹配。
  • 在每个部分周围加上括号可以将这些部分提取为单独的子组。

例如:

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

【讨论】: