gpt4 book ai didi

java - 正则表达式从字母中排除数字

转载 作者:行者123 更新时间:2023-12-01 11:14:42 29 4
gpt4 key购买 nike

我正在尝试匹配文档中的所有字母表列表。这就是它们的显示方式(在新行上):

(a)
(二)
(C)
(四)
..
..
(z)
(aa)
(BB)
..
(Z Z)

这是我为此使用的正则表达式 ^ ?[\(]?([a-z])[\)]

然而,挑战在于罗马数字。我想单独识别罗马数字,如果它们是这个字母表列表的一部分,我不想匹配它们。例如,字母和数字在 (i)、(v)、(x) 和 (c) 上会发生冲突(小于 50)。

如何编写正则表达式来解决这个问题?

编辑

让我简化问题。这是顺序 -
(A)
(二)
(C)
(四)
(我)
(二)
(三)
(四)
(五)
(e)

从上面,我想匹配 (a) (b) (c) (d) (e) 而不是数字。数字总是从 i 开始。它们最多可以包含 50 个数字。正则表达式还必须处理匹配 (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) 因为 i 这里是不是数字。

最佳答案

编辑

正则表达式,用于不匹配括号中、换行中的罗马数字,这些罗马数字在字母表列表中按顺序出现。它应该工作到罗马 50 (L)。

\((?![ivxl]+)[a-z]+\)|(?<!xlix\)\n)\(l\)|(?<![ivxl]\)\n)\((?=[ivxl]+).+\)(?!\n\([ivxl]+\))

DEMO

上一个答案

如果您不想仅匹配完整的罗马数字,请尝试使用以下方法:

\((?!\b([mdclx]+)?(i((ii?)|v|X)?|x|v(ii?i?)?)\b|[mdclx]+\b)[a-z]+\)

DEMO

这是:

  • \( - 左括号,
  • (?!\b([mdclx]+)?(i((ii?)|v|X)?|x|v(ii?i?)?)\b|[mdclx]+\b) -负向预测排除罗马数字的各种版本,但是由单词 Boudaries \b 包围,因此整个单词需要匹配罗马数字,
  • [a-z]+\) - 一个或多个字母后跟右括号,

看来我的正则表达式有时可能会匹配错误,正确的正则表达式似乎是(修改后的版本Steven Levithan 和 Jan Goyvaerts 的正则表达式食谱):

\((?!\b([MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})\b)[a-z]+\)

DEMO

这些输入的结果是相同的,但细节会有所不同

关于java - 正则表达式从字母中排除数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31974960/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com