Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式在所有大写字母中查找名称_Regex - Fatal编程技术网

Regex 正则表达式在所有大写字母中查找名称

Regex 正则表达式在所有大写字母中查找名称,regex,Regex,我正试图找到一个正则表达式,我可以使用Notepad++或类似工具在txt文件中查找包含所有大写名称的行。一旦我找到一个匹配的行,我想添加三个换行符 我有各种条件,因为行是名称。有些名称只有两个字符。有些有连字符。有些有多个名字。有些人的姓和逗号后没有空格。以下是一些例子: 多伊,约翰·L 多伊·史密斯,约翰·L 你知道吗,乔 DOE,JOHN BOB L 多伊,约翰·L 我也可以在其他程序中运行它。我只是想弄明白,这样我就能完成 编辑:我使用的是[A-Z]+,[A-Z]+但它没有选择整行,

我正试图找到一个正则表达式,我可以使用Notepad++或类似工具在txt文件中查找包含所有大写名称的行。一旦我找到一个匹配的行,我想添加三个换行符

我有各种条件,因为行是名称。有些名称只有两个字符。有些有连字符。有些有多个名字。有些人的姓和逗号后没有空格。以下是一些例子:

  • 多伊,约翰·L
  • 多伊·史密斯,约翰·L
  • 你知道吗,乔
  • DOE,JOHN BOB L
  • 多伊,约翰·L
我也可以在其他程序中运行它。我只是想弄明白,这样我就能完成

编辑:我使用的是[A-Z]+,[A-Z]+但它没有选择整行,也没有考虑空格和连字符

回答:以下正则表达式满足了我的需要:

^(?!.*[a-z])(?!.*[0-9]).+$
第二部分回答:我还做了一个调整,以完成我请求的第二部分,即在匹配项之前添加三个换行符

^((?!.*[a-z\d]).+)$
我还确保选择了匹配案例。它使用正则表达式。并替换为以下内容:

\n\n\n\1

谢谢大家

对小写字符使用负前瞻:

^(?!.*[a-z]).+$
这与“任何不包含小写字母的行”匹配


也不允许使用数字:

^(?!.*[a-z\d]).+$
对POSIX字符类使用扩展正则表达式 这将适用于使用GNU grep提供的语料库。调整以适应数据的任何更改

$ grep \
      --extended-regexp \
      --only-matching   \
      --regexp='[[:upper:]-]+, ?[[:upper:]]+' \
      /tmp/corpus 
DOE, JOHN
DOE-SMITH, JOHN
DO, JO
DOE, JOHN
DOE,JOHN
使用GNU Sed添加换行符 您可以使用GNU sed中的append操作执行此操作。例如:

$ sed \
      --regexp-extended '/[[:upper:]-]+, ?[[:upper:]]+/a\\n\n\n' \
      /tmp/corpus
DOE, JOHN L




DOE-SMITH, JOHN L




DO, JO L




DOE, JOHN BOB L




DOE,JOHN L

显示您当前的正则表达式!上面加的。谢谢。嗨,詹姆斯,请添加你的答案作为答案,而不是编辑你的问题。这很有效,但我也有只包含数字的行,所以我需要否定数字。所以快速添加:^(?。.*[a-z])(?!.*[0-9])+$并且它按照我想要的方式工作!谢谢,酷。有关否定数字的更简单方法,请参见编辑后的答案。我并没有解释撇号出现在像AL'JOHN这样的名字中。我能把这些也包括进来吗?不知道你说的“帐户”是什么意思。他们已经被允许了。如果也要排除撇号,请将
'
添加到字符类:
^(?。*[a-z\d'])。+$
。但是如果列表太长,可能更容易使用字符类来代替允许的内容,例如
^[a-Z-,]+$
。如果您在记事本++或Atom中使用此正则表达式,请确保启用“匹配大小写”,否则它将无法正常工作。我确信这两个程序都有缺陷,直到我意识到这个GUI选项发挥了作用。这让我很惊讶,因为我假设当你使用正则表达式时,这个设置会被忽略,它会纯粹使用正则表达式,但是如果没有设置,两个程序对大写和小写的处理是一样的。