gpt4 book ai didi

regex - 查找大写字母的运行

转载 作者:行者123 更新时间:2023-12-02 01:35:55 26 4
gpt4 key购买 nike

我有一个包含一些全大写单词和一些混合大小写单词的文件,我想提取全大写单词(包含在一行中)——也就是说,用 \b 分隔的东西并且包含至少两个大写字母且没有小写字母。一切都是 7 位的。

所以,例如,如果一行是

The QUICK Brown fox JUMPs OV3R T4E LAZY DoG.

然后我想提取 QUICKOV3R T4E LAZY .

这是我目前所拥有的:

while (<$fh>) { # file handle
my @array = $_ =~ /\b[^a-z]*[A-Z][^a-z]*[A-Z][^a-z]*\b/;
push @bigarray, @array;
}

有没有比 [^a-z]*[A-Z][^a-z]*[A-Z][^a-z]* 更优雅的方法呢? ?

最佳答案

看来您需要所有单词定义(构造 \w)字符。
要查找并允许至少两个大写字母且没有小写字母,您可能不会
绕过它们必须有选择地被大写包围的事实
和/或数字或下划线。

还不如只匹配你所需要的。

\b[\d_]*[A-Z]+[\d_]*[A-Z]+[\d_]*\b

展开:

 \b 
[\d_]*
[A-Z]+
[\d_]*
[A-Z]+
[\d_]*
\b

啊,结果

输入:

The QUICK Brown fox JUMPs OV3R T4E LAZY DoG.  

输出:

 **  Grp 0 -  ( pos 4 , len 5 ) 
QUICK
-----
** Grp 0 - ( pos 26 , len 4 )
OV3R
-----
** Grp 0 - ( pos 31 , len 3 )
T4E
-----
** Grp 0 - ( pos 35 , len 4 )
LAZY

更新 - 如果您希望有选择地匹配由空格分隔的连续部分,
这行得通。

 # (?&two_caps)(?:\s+(?&two_caps))*(?(DEFINE)(?<two_caps>\b[\d_]*[A-Z]+[\d_]*[A-Z]+[\d_]*\b))

(?&two_caps)
(?:
\s+ (?&two_caps)
)*

(?(DEFINE)
(?<two_caps>
\b
[\d_]*
[A-Z]+
[\d_]*
[A-Z]+
[\d_]*
\b
)
)

输出:

 **  Grp 0 -  ( pos 4 , len 5 ) 
QUICK
** Grp 1 - NULL
---------
** Grp 0 - ( pos 26 , len 13 )
OV3R T4E LAZY
** Grp 1 - NULL

关于regex - 查找大写字母的运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com