c# - 正则表达式可能吗?

标签 c# regex

我正在解析一个我想提取特定字符串的文件。

该字符串将以一定长度的空格开头,后跟:

  • 一个 H 后跟 8 个十六进制数

  • 一个 G 后跟 9 个十六进制数

后跟回车符和换行符。

我是否可以创建一个等价于“如果字符是 H,则跳过 8 个字符,否则如果字符是 G,则跳过 9 个字符”或者更简单的“如果字符是H,跳过 8 个字符,否则跳过 9 个字符。

我目前使用的与 H 配合良好的正则表达式是 @"\s+H.{8}(? <user> .*)\r\n",但我很困惑在添加条件字符数时。例如,如果有像 [H|G].{8|9} 这样的语法,那就太好了,但我认为这实际上并不存在于正则表达式语法中。

最佳答案

根据我的评论,我只是详细阐述了你的意见

\s+((H.{8})|(G.{9}))(?<user>.*)\r\n

Regular expression visualization

Debuggex Demo

由于 Regex 对应于有限状态自动机,因此很容易看出为什么这是微不足道的,在读取 H 时我们进入一种状态,G 进入另一种状态。

关于c# - 正则表达式可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19642318/

相关文章:

regex - 如何使用 egrep 用逗号和数字搜索特定模式

c# - 解释递归树遍历的最佳 UML 图是什么?

c# - BindingNavigator“保存”按钮未将数据保存到数据库

c# - 创建专门的集合时更喜欢继承还是包含?

java - 匹配带引号的正则表达式?

regex - Perl的正则表达式实现如何利用尝试?

c# - 如何选择 LINQ GroupBy 子句中的最后一条记录

c# - 尾递归优化发生在 visual studio 10 x64 调试中但不是在发布中?

c++ - 使用 QRegularExpression 提取完整的句子

java - 正则表达式可以在线运行,但不能在 Eclipse 中运行