我正在尝试提出一个正则表达式,我可以使用它来查找txt文件中的行,其中包含使用Notepad ++或类似工具在ALL CAPS中的名称。一旦找到匹配的行,我想添加三个换行符。
我有各种条件,因为这些行是名字。有些名称只有两个字符。有些有连字符。有些人有多个名字。有些人的姓氏和逗号后面没有空格。以下是一些例子:
我也可以在其他程序中运行它。只是想弄清楚这一点,所以我可以完成它。
编辑:我正在使用[A-Z] +,[A-Z] +,但它没有选择整行,也没有考虑空格和连字符。
答案:以下正则表达式满足了我的需求:
^(?!.*[a-z])(?!.*[0-9]).+$
第2部分答案:我还做了一个调整,以便完成我的请求的第二部分,即在匹配项目之前添加三个换行符。
^((?!.*[a-z\d]).+)$
我还确保选择了Match Case。它使用正则表达式。并替换为以下内容:
\n\n\n\1
谢谢大家!
答案 0 :(得分:4)
对小写字符使用负向前看:
^(?!.*[a-z]).+$
这匹配“任何不包含小写字母的行”。
还要禁止数字:
^(?!.*[a-z\d]).+$
答案 1 :(得分:0)
这适用于使用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中的追加操作执行此操作。例如:
$ 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