regex - 将正则表达式捕获的子字符串转换为整数并将其用作 VB.Net 中的函数参数
问题描述
我有一个字符串,例如:
Dim initialString As String = "Some text here is f(42,foo,bar) and maybe some other here."
并希望将“f(42,foo,bar)”部分替换为具有以下原型的函数的评估:
Function myLittleFunction(ByVal number As Integer, ByVal string0 As String = "NA0", ByVal string1 As String = "NA1")
我用这个正则表达式做的女巫:
finalString = System.Text.RegularExpressions.Regex.Replace(initialString, "f\((\d+),([a-zA-Z0-9_ ]+),([a-zA-Z0-9_ ]+)\)", myLittleFunction(Convert.ToUInt32("${1}"), "$2", "$3"))
但这不起作用,因为 Convert.ToUInt32("${1}") 失败。如果手动将其替换为任何整数并运行代码,我的字符串中就有正确的评估和替换。
如何正确地将 "$1" 转换为适当的整数?
解决方案
字符串替换模式不能被插值用作方法的变量。
您可以使用匹配评估器:
Dim rx = New Regex("f\((\d+),([a-zA-Z0-9_\s]+),([a-zA-Z0-9_\s]+)\)")
Dim result = rx.Replace(s, New MatchEvaluator(Function(m As Match)
Return myLittleFunction(Convert.ToUInt32(m.Groups(1).Value), m.Groups(2).Value, m.Groups(3).Value)
End Function))
m
是一个Match
对象,由方法找到的对象Regex.Replace
。您可以使用 .regex 访问使用正则表达式捕获的所有组m.Groups(N).Value
。
推荐阅读
- maven - 如果在 intellij 中运行 XML,则构建工作,但命令行运行出错
- python - Python 初学者 - 根据条件过滤字符串列表
- selenium - 页面,由 selenium 驱动,未完成加载,无法自省
- sql - SQL从两个表中选择错误的结果
- numpy - Python numpy:索引是否优先?
- javascript - 从回调函数中更改变量值
- java - 某些异常上的反应式流跳过过滤器
- postgresql - *[]*model.ModelName 中缺少目的地名称 u.shake_hands_id
- google-apps-script - Google Apps 脚本批处理执行时出现意外时间
- python - 如何从特定组的条形图中删除空白空间,该空间在 pandas 数据框中的数据上绘制为 seaborn 条形图