2014-09-11 60 views
1

我有一个名称列表,我使用正则表达式来过滤该列表。 比方说,我的名单看起来是这样的:从字符范围生成正则表达式

  • 爱丽丝
  • 安娜
  • 鲍勃
  • 约翰
  • 弗兰克
  • 彼得

现在我只希望在th的名字e范围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脚本来完成这项工作,但不幸的是我无法做到这一点。这就是为什么我要求你们帮助:)

有没有人有一个想法,我可以如何产生这些表达式? 任何帮助,不胜感激。

PS:英语不是我的母语,但我希望你明白我的问题:)

+1

你用VBA脚本试过了什么?为什么它不工作?乍看之下,您似乎有了如何将需求转化为正则表达式的想法,那么将其转化为代码的问题是什么? – Degustaf 2014-09-11 13:08:03

+2

为什么要使用正则表达式?为什么不分类清单? – Biffen 2014-09-11 13:11:48

+0

我忘了提及这个列表是应用程序的一部分,它使用正则表达式来过滤名称,所以我不能改变它。这就是为什么我实际需要生成正则表达式。没有其他办法。 我没有发布我的VBA方法,因为我没有设法做任何事情。我知道如何手动编写正则表达式,我只是不知道如何创建一个脚本或任何我需要的东西。 – Tagas 2014-09-11 13:43:19

回答

2

替代,更简单的方法:

Excel公式

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

或等效的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 

enter image description here

+0

感谢您的回答。这当然会在excel中工作,但我的列表不在excel中(忘记提及这一点,很抱歉)。该列表是仅接受正则表达式来过滤名称的应用程序的一部分。所以我实际上需要生成正则表达式。 – Tagas 2014-09-11 13:48:56

+0

为什么不提取所有名称A-Z并使用上述VBA函数自己过滤它们?使用正则表达式按字母顺序排序就像......我努力寻找一个很好的比喻来使用超级复杂的方法来做一些非常简单的事情。 – 2014-09-11 14:27:14

+0

我不想提取名称,应用程序只需要正则表达式来做东西。我无法真正解释它,但对你来说也没有关系:)。我想知道的是我如何生成正则表达式。 – Tagas 2014-09-11 14:44:48