如何修改正则表达式以避免匹配左方括号前的空格?
我用正则表达式 (^.*[ ]\(\d{4}\)\.[ ])([^[.]+)(.*) 提取中英文文献标题(第二个捕获组),正常场景下能正常工作,但遇到带英文翻译的中文标题时,会误匹配左方括号[前的空格。我试着添加负前瞻(?![ ] \[)但没效果,请问该怎么修改这个正则表达式来避免匹配这个空格?
示例引用:
方圓媛, 洪佳黛, 詹瑞君, & 李芸湘. (2017). 談癌症病人家屬照顧者心理衝擊與介入方案 [Psychological Impact of Nursing Interventions for Family Caregivers of Patients with Cancer]. 榮總護理, 34(3), 220-226. https://doi.org/10.6142/vghn.34.3.220
Azzam, P., Mroueh, M., Francis, M., Daher, A. A., & Zeidan, Y. H. (2020). Radiation-induced neuropathies in head and neck cancer: prevention and treatment modalities. Ecancermedicalscience, 14, 1133. https://doi.org/10.3332/ecancer.2020.1133
我尝试过的正则:(^.*[ ]\(\d{4}\)\.[ ])([^[.]+|(?![ ] \[))(.*)
你可以把第二个捕获组替换为惰性匹配加正前瞻,完整正则如下:
(^.*[ ]\(\d{4}\)\.[ ])(.*?)(?= \[|\.)(.*)
关键逻辑说明:
.*?采用惰性匹配模式,会尽可能少地匹配字符,防止过度捕获多余内容(?= \[|\.)是正前瞻断言,指定标题的终止边界:要么是「空格+左方括号」(对应带英文翻译的中文标题场景),要么是「句号」(对应普通中英文标题场景)
用这个正则测试你的示例:
- 中文文献会精准捕获标题「談癌症病人家屬照顧者心理衝擊與介入方案」,不会包含
[前的空格 - 英文文献会完整捕获标题「Radiation-induced neuropathies in head and neck cancer: prevention and treatment modalities」,完全符合需求
内容的提问来源于stack exchange,提问作者wyc

