我想要一个正则表达式,可以帮助我使用Stata从字符串中提取一个人的名字。

字符串示例如下:

name_adr
JAMES DeNORMANDIETrapelo Rd., Lincoln
JAMES A. KELLY, JR.Stafford St., Oxford
GEORGE WILLIAM SHATTUCKMt. Lebanon St., Pepperell

我要摆脱它们的方法如下:
name
JAMES DeNORMANDIE
JAMES A. KELLY, JR.
GEORGE WILLIAM SHATTUCK

棘手的部分是,其中一些名称没有大写字母。

我的想法是寻找字符串中后面有两个连续大写字母的部分。我使用的简单正则表达式是[A-Z][A-Z][.*]$,但即使这样也不起作用。

任何想法如何进行?

最佳答案

看一下这个正则表达式:

.+(?=(?:[A-Z]{2})|_)(?:(?:[A-Z])(?:[A-Z]\.)?)?

Regex Demo

输出:


  • JAMES DeNORMANDIE
  • JAMES A. KELLY,JR。
  • 乔治·威廉·沙特克


  • 说明:
    .+                      # Match all characters
    (?=[A-Z]{2}|_)          # Positive lookahead - assert that matches two capitals or _ (but does not capture)
    (?:                     # Non-capturing group
      (?:[A-Z])             # Match one capital letter
      (?:[A-Z]\.)?          # Optionally match one capital letter followed by dot
    )?                      # Non-capturing group is optional
    

    regex - 从末尾开始连续两个大写字母-LMLPHP

    关于regex - 从末尾开始连续两个大写字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58260726/

    10-13 00:41