c# - 使用以点开头的正则表达式匹配字符串,不包括 double

标签 c# regex

我正在寻找一个正则表达式来分割以下字符串:

.name "收集器显示压力".target "目标".curio_result_type "负".chance 80% .stress 10.0 .on_hit true .on_miss false.queue true

进入: .name“收藏家展示压力” .target“目标” .curio_result_type“阴性” .机会 80% .压力10.0 .on_hit true .on_miss false .queue true

我使用了以下正则表达式来匹配,但它也分割了 double : \.[^.]+

我得到的结果是: .name“收藏家展示压力” .target“目标” .curio_result_type“阴性” .机会 80% .压力10 .0 .on_hit true .on_miss false .queue true

在正则表达式方面,我基本上是个新手,因此非常感谢您的帮助。

我在 C# 控制台应用程序中使用正则表达式。

提前致谢!

最佳答案

为了匹配您的示例数据,您可以匹配第二部分的可用选项:

\.[^.\s]+ (?:"[^"]+"|true|false|[0-9]+(?:\.[0-9]+)?%?)

说明

  • .[^.\s]+ 匹配 。以及除点或空白字符之外的任何字符出现 1 次以上
  • (?: 非捕获组
    • "[^"]+" 从开头到结尾的双引号匹配 "..."
    • |
    • true 按字面意思匹配
    • |
    • false 按字面意思匹配
    • | 或者
    • [0-9]+(?:\.[0-9]+)? 将 1+ 位数字与可选的小数部分匹配
    • %? 匹配可选的百分号
  • ) 关闭群组

Regex demo

不太严格的模式可能是不匹配点,或者在后面跟数字时匹配点

\.[^.]+ (?:[^.\s]|\.(?=[0-9]))+

说明

  • .[^.]+ 匹配一个点,后跟 1+ 次除点之外的任何字符
  • (?: 非捕获组
    • [^.\s] 匹配除点或空白字符之外的任何字符
    • | 或者
    • \.(?=[0-9]) 匹配直接在右侧声明数字的点
  • )+ 关闭组并重复 1 次以上

Regex demo

关于c# - 使用以点开头的正则表达式匹配字符串,不包括 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60801131/

相关文章:

c# - 在C#中获取一个国家的大陆

c# - 正则表达式获取模式的最后一次出现

regex - U-Boot版本提取对比

regex - 在环视中使用捕获组

c# - 没有 lambda 表达式的路由

c# - linq lambda多步骤数组

c# - SelectedIndex 第一次调用时列表框 SelectedValue 错误

c# - 忽略字符串中的字符 ""

python - 为什么 '1{0}' 正则表达式总是与空字符串匹配?

swift - 拆分所有字符的字符串,除了一些正则表达式