c# - C# 中的多行正则表达式
问题描述
我不是很喜欢正则表达式,但这次我无法避免它们。
我必须匹配以下文本的每一行,以便每一行都是匹配的
️Winners in this draw️
John VN:Odd5=9.9 Pair3=6
iiiddd:Odd1=1.98
aaaxxx:Dragon10=21 Odd20=39.6
GeralynAguilar:Big4=7.92
----------
每条线上都有一名球员。
Foreach Player 有他的名字:all_the_bets_he_placed,以空格分隔。
Foreach 投注有 bet_name=amount_he_won
我需要上述所有字段并编写了可能很丑的正则表达式
Regex r = new Regex(@"^(?<player>(?<name>[^:]+):(?<allbets>(?<onebet>(?<betname>[^=\s]*)=(?<value>\d+\.?\d*)\s?))+)$", RegexOptions.ExplicitCapture| RegexOptions.Multiline);
正则表达式只匹配一个匹配项,但如果我在每一行的末尾添加一个空格,一切都会正常工作。我不明白为什么。
谢谢你的帮助。
解决方案
这在正则表达式方面并不优雅,但我对其进行了测试并且它有效:
\uD83D\uDC49(?<player>[^:]+):(?<bet1name>[^:=]+)=(?<bet1value>\d+(?:\.\d+)?)(?:\s(?<bet2name>[^:=]+)=(?<bet2value>\d+(?:\.\d+)?))?
但是,Regex 并不是解决这个特定问题的最佳选择。首先,您知道每个结果在单独的一行,其次,您知道每个玩家的姓名和他们的赌注用冒号分隔,接下来,您知道赌注用空格分隔,最后,赌注的名称和价值用等号分隔。所以...
我会拆分字符串。
Split('\n')
文本获取一个string[]
数组,然后循环该数组。如果该行以表情符号开头,Substring()
然后通过表情符号以获取相关文本,那么Split(':')
,这将为您提供一个string[]
数组,其中玩家姓名位于索引 0,投注位于索引 1。然后Split(' ')
是单独获得每个投注的投注作为另一个string[]
数组。最后,Split(' ')
每次下注得到最后一个string[]
数组,下注名称在索引 0 处,下注值在索引 1 处。
您可以将其包装到一个方法中,该方法可以将其全部吐出到List<>
一个自定义类中,该类将强类型下注值转换为小数。
推荐阅读
- php - 在没有 httponly 标志的情况下创建的 Cookie XSRF-TOKEN - Laravel 5.8
- flutter - Flutter - 将背景渐变应用于可滚动视图
- python - 使用字典标记句子中的单词
- curl - OpenSSL SSL_connect:SSL_ERROR_SYSCALL 连接到 ubuntu 上的 storage.googleapis.com:443
- python - 创建图表时出现未知索引错误
- python - 找到一组特征向量的对应特征值
- android - 如何签署 Expo 应用程序 APK 以更新 Google Play 商店中的现有应用程序?
- google-cloud-platform - 为什么 terraform 创建的负载均衡器无法连接我的后端?
- python - 在 python 中使用 ARIMA 并进行集成时,如何使预测未集成?
- javascript - 未捕获的类型错误:无法读取未定义的属性“toFixed”