Regex 从字符范围生成正则表达式

Regex 从字符范围生成正则表达式,regex,vba,Regex,Vba,我有一个名字列表,我使用正则表达式来过滤这个列表。 假设我的列表如下所示: 爱丽丝 安娜 鲍勃 简 约翰 坦率的 彼得 现在我只想要范围A-D中的名称,所以我使用正则表达式^[A-D].得到Alice,Anna,Bob 这很简单,但是当我选择一个更具体的范围时,正则表达式变得更复杂,比如a-Jen-->^([a-I].*J([a-d].[a-e][a-n])。 现在我有爱丽丝,安娜,鲍勃,简 而且它变得更难,例如 Abc-Def-->^((A([b-z][c-z].[c-z].*))|[b-

我有一个名字列表,我使用正则表达式来过滤这个列表。 假设我的列表如下所示:

  • 爱丽丝
  • 安娜
  • 鲍勃
  • 约翰
  • 坦率的
  • 彼得
现在我只想要范围
A-D
中的名称,所以我使用正则表达式
^[A-D].
得到Alice,Anna,Bob

这很简单,但是当我选择一个更具体的范围时,正则表达式变得更复杂,比如
a-Jen
-->
^([a-I].*J([a-d].[a-e][a-n])。

现在我有爱丽丝,安娜,鲍勃,简

而且它变得更难,例如

Abc-Def
-->
^((A([b-z][c-z].[c-z].*))|[b-c].*D([A-D][A-e][A-f])

所以基本上我在寻找一种根据字符范围生成这些正则表达式的方法。我试图制作一个VBA脚本来完成这项工作,但不幸的是我做不到。这就是为什么我要请你们帮忙:)

有人知道如何生成这些表达式吗? 非常感谢您的帮助


注:英语不是我的母语,但我希望你能理解我的问题:)

另一种更简单的方法:

Excel公式

=AND($A5>=$B$1,$A5<=$B$2)

=和($A5>=$B$1,$A5=lo和strName您用VBA脚本做了哪些尝试?为什么它不起作用?乍一看,您似乎知道如何将需求转化为正则表达式,那么将其转化为代码有什么问题?为什么要使用正则表达式?为什么不对列表进行排序?我忘了提到此列表是其中的一部分它使用正则表达式来过滤名称,所以我不能更改。这就是为什么我实际上需要生成正则表达式。没有其他方法。我没有发布我的VBA方法,因为我没有真正做到任何事情。我知道如何手动编写正则表达式,我只是不知道如何创建脚本或其他什么我需要的。看,这是一个很高的要求。没有人会为你做这件事(至少不是免费的)。你必须自己尝试一些东西,并询问你在这过程中遇到的具体问题。为此,我们可以提供帮助。提示:这看起来像一个递归任务。模式是
(a(#####)D(####.
其中
####
本身具有类似的结构。感谢您的回答。这当然可以在excel中使用,但我的列表不在excel中(对不起,忘了提及这一点)。该列表是只接受正则表达式来过滤名称的应用程序的一部分。因此,我实际上需要生成正则表达式。为什么不提取所有名称A-Z,然后使用上面的VBA函数自己过滤它们呢?使用正则表达式按字母顺序排序就像……就像……我正在努力找到一个很好的隐喻,用于使用超复杂的方法来过滤名称做一些非常简单的事情。我不想提取名称,应用程序只需要正则表达式就可以了。我不能真正解释它,但这对你来说也无关紧要:)。我只想知道如何生成正则表达式。
Function IsAlphabeticallyBetween(ByVal strName As String, _
    ByVal lo As String, ByVal hi As String) As Boolean

    IsAlphabeticallyBetween = strName >= lo And strName <= hi

End Function