f# - 如何在 f# 中进行非标准字符串替换?
问题描述
我是 f# 的新手,想用它来改变命题逻辑公式字符串的格式:
我想用字符串“next(a)”替换“aX”,'a' 是 [a..z] 的一个元素,'X' 是大写的 X' 字符。
我找到的所有来源,例如https://www.dotnetperls.com/replace-fs要么用另一个字符串替换一个字符串,
let s = "a & b & c & aX & !bX"
let sReplaced = s.Replace("X", "next()") // val it : string = "a & b & c & anext() & !bnext()"
在这种情况下,您不能将原始字符放在两者之间,或者它们是否按字符工作,例如。
let sArray = s.ToCharArray()
for c in 0 .. sArray.Length - 1 do
if sArray.[c] = 'X' then
sArray.[c-2] <- '('
sArray.[c] <- ')'
let sArrayResult = new string(sArray) // val sArrayResult : string = "a & b & c &(a) & (b)"
只允许输出字符串的长度相同。
“a & b & c & aX & !bX”
应该替换为
“a & b & c & next(a) & !next(b)”
有没有一些方便的方法来处理这个问题?提前致谢。
解决方案
您可以使用MatchEvaluator
:
open System.Text.RegularExpressions
let s = "a & b & c & aX & !bX"
Regex.Replace(s, "([a-z]X)", fun m -> "next(" + m.Value.TrimEnd('X') + ")")
- ;;
val it : string = "a & b & c & next(a) & !next(b)"
推荐阅读
- laravel - 从 laravel 请求中删除请求文件
- android - 如果应用程序被系统杀死,则保留共享首选项的值
- algorithm - 机器学习算法与 GIS/遥感软件算法
- java - 用 BND 和/或 maven-bundle-plugin 包装 JAR
- android - 如何使用 kotlin android 更新我的 Recyclerview?
- python - 在 PyCharm 中,我应该使用嵌入式终端还是运行控制台?
- spring - 春季安全 - Facebook
- python-3.x - 在 Python 中计算累积平均值
- reactjs - 从反应中的网址下载文件
- c# - 将字典作为参数传递