regex - 匹配正则表达式中的可选子字符串

标签 regex

我正在开发一种算法来解析一系列短字符串中的数字。这些字符串有些规则,但有一些不同的一般形式和一些异常(exception)。我正在尝试构建一组正则表达式来处理各种形式和异常;我会一个接一个地应用它们,看看是否能匹配。

其中一种形式如下:

X (Y) Z

地点:

  • X 是我要捕获的数字。
  • Z 是静态的预定义文本。这基本上就是我确定此特定表格是否适用的方式。
  • Y 是一个长度和内容未知的字符串,用括号括起来。

另外:Y 是可选的;它并不总是出现在带有 ZX 的字符串中。因此,我希望能够从所有这些字符串中提取数字:

  • 10 Z
  • 20 (foo) Z
  • 30(条)Z

现在,我有一个正则表达式可以捕获第一个:

([0-9]+) +Z

我的问题是,我不知道如何构造一个正则表达式,当且仅当它们包含在括号中时,该正则表达式才能匹配一系列字符。这可以在单个正则表达式中完成吗?

最佳答案

(\d+)\s+(\(.*?\))?\s?Z

注意转义括号和 ? (零或一次)量词。您不想捕获的任何组都可以是(?: 非捕获组)。

我同意这些空格。 \s 是一个更好的选择。我还更改了量词以确保开头有数字。就换行符而言,这取决于上下文:如果文件是逐行解析的,那么它不会成为问题。另一种选择是锚定行的开头和结尾(在前面添加 ^,在末尾添加 $)。

关于regex - 匹配正则表达式中的可选子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/241285/

相关文章:

php - 正则表达式重复字符

python - 使用正则表达式检测 Twitter 句柄

c# - 排除回车的正则表达式返回与回车的匹配

regex - XSLT 2.0 中的正则表达式是什么方言?

python - 正则表达式获取双引号之间的所有内容

javascript - 构建忽略空格的动态正则表达式

css - CSS 图像 url 的正则表达式

regex - 从文本文件中提取信息 block 并创建 Pandas 数据框并存储

regex - Perl制表程序

regex - 如何在Notepad++ 中删除具有特定开始和结束的行的一部分?