正则表达式以提取以'/'为界的文本

魔术子弹戴夫

我需要一个正则表达式来从GEDCOM文件中提取名称。格式为:

弗雷德·约瑟夫/史密斯/

以/为界的文本是姓氏,而弗雷德·约瑟夫(Fred Joseph)是前生。复杂之处在于,姓氏可以在文本中的任何位置,也可以根本不存在。我需要一些可以提取姓氏并捕获其他所有内容的东西。

据我所知,我尝试过使用?来使组可选。限定词但无济于事:

到目前为止我有什么

正如您所看到的,它有几个问题:如果缺少姓氏,则不会捕获任何东西,而这些地名有时会带有前导和尾随空格,并且当我真的希望2个时,我会拥有3个捕获组。姓氏的捕获组未包含“ /”字符。

任何帮助将非常感激。

新作

为了您的最后一行,我不知道有一种方法来加入该组1组3成一个组。

这是我建议的解决方案。它不会捕获前视点周围的空间。

^(?:\h*([a-z\h]+\b)\h*)?(?:\/([a-z\h]+)\/)?(?:\h*([a-z\h]+\b)\h*)?$

要正确匹配名称,请注意使用不敏感标志,如果您一次测试所有行,请使用多行标志。

观看演示

说明

  • ^ 线的起点
  • (?:\h*([a-z\h]+\b)\h*)? 与0或1次匹配的第一个非捕获组:
    • \h* 0个或更多水平空间
    • ([a-z\h]+\b) 捕获一组字母和空格,但在最后一个单词的末尾停止
    • \h* 匹配可能的剩余空间而不捕获
  • (?:\/([a-z\h]+)\/)? 第二个非捕获组,与捕获组中用斜杠包围的名称匹配0或1倍
  • (?:\h*([a-z\h]+\b)\h*)? 第三非捕获组与第一个相同,捕获第三组中的名称。
  • $ 队伍的尽头

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章