Regex 正则表达式:如何从文本中查找和提取首字母缩略词以及首字母缩略词的相应定义?
我想做一些像在这个问题中建议的事情——但在更一般的层面上: 输入示例: “在一组开创性的论文中,Feddersen和Pesendorfer(1996年,1999年),此后的FP,incorporate…被贴上了“摇摆选民的诅咒”,从现在开始SVC。该预测……是开始使用静态应用程序安全测试的最佳方法(SAST)工具..来自拉丁语ante meridiem(A.M.)意思是中午之前……” 结果:Regex 正则表达式:如何从文本中查找和提取首字母缩略词以及首字母缩略词的相应定义?,regex,text-analysis,acronym,Regex,Text Analysis,Acronym,我想做一些像在这个问题中建议的事情——但在更一般的层面上: 输入示例: “在一组开创性的论文中,Feddersen和Pesendorfer(1996年,1999年),此后的FP,incorporate…被贴上了“摇摆选民的诅咒”,从现在开始SVC。该预测……是开始使用静态应用程序安全测试的最佳方法(SAST)工具..来自拉丁语ante meridiem(A.M.)意思是中午之前……” 结果: ['Feddersen and Pesendorfer','FP'] [‘摇摆选民的诅咒’、‘SVC’
- 括号:…(…)
- ……以后
- …从现在起
- …在这之后
- …被称为
- ……随后
- ……因此
- ……从今以后
- …以下简称
- 等等
(?x)
(?(DEFINE)
(?<addr_spec> (?&local_part) @ gbase\.tt )
(?<local_part> (?&dot_atom) | (?"ed_string) | (?&obs_local_part) )
(?<domain> (?&dot_atom) | (?&domain_literal) | (?&obs_domain) )
(?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dtext) )* (?&FWS)? \] (?&CFWS)? )
(?<dtext> [\x21-\x5a] | [\x5e-\x7e] | (?&obs_dtext) )
(?<quoted_pair> \\ (?: (?&VCHAR) | (?&WSP) ) | (?&obs_qp) )
(?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)? )
(?<dot_atom_text> (?&atext) (?: \. (?&atext) )* )
(?<atext> [a-zA-Z0-9!#$%&''*+/=?^_`{|}~-]+ )
(?<atom> (?&CFWS)? (?&atext) (?&CFWS)? )
(?<word> (?&atom) | (?"ed_string) )
(?<quoted_string> (?&CFWS)? "" (?: (?&FWS)? (?&qcontent) )* (?&FWS)? "" (?&CFWS)? )
(?<qcontent> (?&qtext) | (?"ed_pair) )
(?<qtext> \x21 | [\x23-\x5b] | [\x5d-\x7e] | (?&obs_qtext) )
# comments and whitespace
(?<FWS> (?: (?&WSP)* \r\n )? (?&WSP)+ | (?&obs_FWS) )
(?<CFWS> (?: (?&FWS)? (?&comment) )+ (?&FWS)? | (?&FWS) )
# (?<ccontent> (?&ctext) | (?"ed_pair) )
(?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment) )
(?<ctext> [\x21-\x27] | [\x2a-\x5b] | [\x5d-\x7e] | (?&obs_ctext) )
# obsolete tokens
(?<obs_domain> (?&atom) (?: \. (?&atom) )* )
(?<obs_local_part> (?&word) (?: \. (?&word) )* )
(?<obs_dtext> (?&obs_NO_WS_CTL) | (?"ed_pair) )
(?<obs_qp> \\ (?: \x00 | (?&obs_NO_WS_CTL) | \n | \r ) )
(?<obs_FWS> (?&WSP)+ (?: \r\n (?&WSP)+ )* )
(?<obs_ctext> (?&obs_NO_WS_CTL) )
(?<obs_qtext> (?&obs_NO_WS_CTL) )
(?<obs_NO_WS_CTL> [\x01-\x08] | \x0b | \x0c | [\x0e-\x1f] | \x7f )
# character class definitions
(?<VCHAR> [\x21-\x7E] )
(?<WSP> [ \t] )
)
((?&addr_spec))
(?x)
(?(定义)
(((&本地部分)@gbase\.tt)
(?(?&dot_原子);(?"ed_字符串);(?&obs_局部部分))
(?(?&dot_原子)|(?&domain_文字)|(?&obs_domain))
(?(?&CFWS)?\[(?:(?&FWS)?(?&dtext))*(?&FWS)?\](?&CFWS)?)
(?[\x21-\x5a]|[\x5e-\x7e]|(?&obs\u dtext))
(?\ \(?:(?&VCHAR)|((?&WSP))|((?&obs\U qp))
(?(?&CFWS)?(?&dot_原子_文本)(?&CFWS)?)
(?(?&atext)(?:\(?&atext))*)
(?[a-zA-Z0-9!#$%&'*+/=?^{124;}~-]+)
(?(?&CFWS)?(?&atext)(?&CFWS)?)
(?(?&atom)|(?"ed_字符串))
(?(?&CFWS)?“”(?:(?&FWS)?(?&qcontent))*(?&FWS)?“”(?&CFWS)?)
(?(?&qtext)|(?"ed_对))
(?\x21 |[\x23-\x5b]|[\x5d-\x7e]|(?&obs\u qtext))
#注释和空白
((?:(?&WSP)*\r\n)?(?&WSP)+|(?&obs_-FWS))
(?(?:(?&FWS)?(?&comment))+(?&FWS)?|(?&FWS))
#(?(?&ctext)|(?"ed_对))
(?(?&ctext)|(?"ed|对)|(?&comment))
(?[\x21-\x27]|[\x2a-\x5b]|[\x5d-\x7e]|(?&obs\ctext))
#过时代币
(?(?&原子)(?:\.(?&原子))*)
(?(?&word)(?:\(?&word))*)
((?(?&obs_-NO_-WS_-CTL)(?"ed_-pair))
(?\\(?:\x00 |)(?&obs\u NO\u WS\u CTL)\n\r))
(?(?&WSP)+(?:\r\n(?&WSP)+*))
((((?&obs\U NO\U WS\U CTL))
((((?&obs\U NO\U WS\U CTL))
(?[\x01-\x08]|\x0b |\x0c |[\x0e-\x1f]|\x7f)
#字符类定义
(?[\x21-\x7E])
(?[\t])
)
((?&addr_spec))
当然,这个表达式确实使用了递归,这在许多风格的正则表达式中都不能很好地发挥作用。要解决这个问题,您可以简单地注释掉ccontent并取消注释另一个ccontent,前提是您接受表达式将不再找到递归注释
然而
单独将其构造为正则表达式可能会给您留下一个表达式,以后很难阅读、调试或修改。因此,您最好循环浏览SOWFBAAD定义列表。您可以得到这样的结果,但您需要确认它们确实是首字母缩略词。总之,有多少个单词,我指的是哪个can在首字母缩略词之前?