匹配变量模式的Python正则表达式
我正在尝试编写一个匹配两种模式的python正则表达式: 第一个是匹配变量模式的Python正则表达式,python,regex,Python,Regex,我正在尝试编写一个匹配两种模式的python正则表达式: 第一个是scratch\u alpha 第二个是scratch_alpha1*12(其中12可以是任何十进制数) 我想把值放在变量的*后面,如果在*后面检测到scratch\u alpha,只需在变量中写1 我写了这个正则表达式: ([a-zA-Z0-9\\\\*]+)(\*\d+) 我希望后面会有两个组,第一个是名字“scratch_alpha”,第二个是*后面的数字或无(如果无,我将变量初始化为1) 但对于我的正则表达式,第一组似乎包
scratch\u alpha
第二个是scratch_alpha1*12
(其中12可以是任何十进制数)
我想把值放在变量的*
后面,如果在*
后面检测到scratch\u alpha,只需在变量中写1
我写了这个正则表达式:
([a-zA-Z0-9\\\\*]+)(\*\d+)
我希望后面会有两个组,第一个是名字“scratch_alpha”,第二个是*
后面的数字或无(如果无,我将变量初始化为1)
但对于我的正则表达式,第一组似乎包含所有内容(scratch_alpha*12),而不是第一组中的scratch_alpha和第二组中的值。试试这个正则表达式:([^*]+)\*(\d+)
- 第一组:所有字符直到
*
- 第二组:
*
使现代化 以满足您对模式的要求
scratch\u alpha
scratch_alpha1*12
*
后面的数字是可选的*
scratch\u alpha(?:(:\d+)\*(\d+)?
如果捕获组为空,则*
后面没有数字,您可以使用1初始化变量
试试这个正则表达式:([^*]+)\*(\d+)
- 第一组:所有字符直到
*
- 第二组:
*
使现代化 以满足您对模式的要求
scratch\u alpha
scratch_alpha1*12
*
后面的数字是可选的*
scratch\u alpha(?:(:\d+)\*(\d+)?
如果捕获组为空,则*
后面没有数字,您可以使用1初始化变量
第一组无需
*
([a-zA-Z0-9\_]+)(\*\d+)?
如果您希望在
*
前后分别添加字符,也可以将(\*\d+)
更改为(\*\d+)
。第一组中不需要*
([a-zA-Z0-9\_]+)(\*\d+)?
如果希望在
*
之前和之后分别使用字符,也可以将(\*\d+)
更改为(\*\d+)
。发生这种情况的原因是,在第一个括号内放置了+
,这意味着一次或多次出现的最小值。因为第二个括号中有一个?
,所以第二组是可选的。因此,它被省略,因为第一个括号可以匹配整个字符串,而第二个括号不需要匹配任何内容
您可以通过从[]
中删除*
来克服这一问题,这样它就不匹配,并且在第一个括号中就无法匹配*
。因此,现在您的正则表达式将是([a-zA-Z0-9\\\\\\\+)(\*\d+)
希望这能有所帮助。之所以会出现这种情况,是因为在第一个括号中,您添加了一个
+
,这意味着一次或多次出现的最小值。因为第二个括号中有一个?
,所以第二组是可选的。因此,它被省略,因为第一个括号可以匹配整个字符串,而第二个括号不需要匹配任何内容
您可以通过从[]
中删除*
来克服这一问题,这样它就不匹配,并且在第一个括号中就无法匹配*
。因此,现在您的正则表达式将是([a-zA-Z0-9\\\\\\\+)(\*\d+)
希望这有帮助。您应该从
[a-zA-Z..]中删除*
您的第一个组中有一个星号您应该从[a-zA-Z..]中删除*
。]
您的第一组中有一个星号这是Noobscripter答案的重复。@AniMenon这解释了为什么他的原始正则表达式不匹配,以及为什么正确的正则表达式匹配。请解释当他最容易理解的解决方案是对他的regex
修改最少的方案时,这是一种重复,并解释其区别?解释很好,你可以在另一个答案中添加相同的内容。这是Noobscripter答案的重复。@AniMenon这解释了为什么他的原始正则表达式不匹配,以及为什么更正的正则表达式匹配。请解释当他最容易理解的解决方案是对其regex
修改最少的解决方案时,这是一种重复,并解释其差异。解释很好,您可以将其添加到其他答案中。