等价于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。
谢谢你的帮助。
我认为这就是你想要做的;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非常相似。
m.Success
将始终返回true
, m.Value
将始终给您相同的结果。Match
方法只匹配regex的第一次出现。您是否想使用返回MatchCollection
的Matches
方法?或者您在replace中调用的Solve
方法实际上更新了m
的值吗?