等价于c# matchObject.值

本文关键字:matchObject 等价于 | 更新日期: 2023-09-27 18:14:17

我试图解析一些c#代码到Python。该代码中有几个正则表达式。到目前为止一切正常,但现在我有以下问题:

c#代码:

Match m = regEx.Match( Expression );
while( m.Success )
{
    Expression = Expression.Replace( m.Value, m.Groups[1].Value + this.Solve( m.Groups[2].Value ) );
}

我怎么做才能使这段代码在python中工作?我已经试过这样做了:

matchObj = re.search(pattern = p, string = expression, flags = re.IGNORECASE)
while matchObj:
    if len(matchObj.group(3)) > 0:
        expression = re.sub(pattern = p, repl = matchObj.group(1) + self.solve(matchObj.group(2)), string = matchObj.string, flags = re.IGNORECASE) #Here is the problem...

所以实际上我要找的是matchobject。value。

谢谢你的帮助。

等价于c# matchObject.值

我认为这就是你想要做的;match.group()(不带参数)返回整个regex匹配的匹配:

m = re.search( pattern, text )
if m and len( m.group(3) ) > 3:
    text = text.replace( m.group(), m.group(1) + solve( m.group(2) ) )

我不知道为什么你有一个循环,所以我删除了它。另一种不使用str.replace的方法是根据m.start()m.end()返回的位置对字符串进行操作。

re.search返回python中的Match对象。来自文档:

扫描字符串,寻找正则表达式产生匹配的位置,并返回相应的MatchObject实例。如果字符串中没有匹配模式的位置,则返回None;注意,这与在字符串的某个点上找到零长度匹配是不同的。

要从python MatchObject中获得整个匹配的字符串,请使用group方法。matchObj.group()matchObj.group(0)将返回整个匹配的字符串,而matchObj.group(1)将返回第一个匹配的组,以此类推。这与c#的Match非常相似。

现在,关于你的c#代码…这不是一个无限while循环吗?m.Success将始终返回true, m.Value将始终给您相同的结果。Match方法只匹配regex的第一次出现。您是否想使用返回MatchCollectionMatches方法?或者您在replace中调用的Solve方法实际上更新了m的值吗?