我想使用正则表达式从文件中读取特定字符之间的多个字符串。我已经尝试了以下代码,但无法获得预期的结果。
我的输入文件包含以下格式的数据:
#*OQL[C++]: Extending C++ with an Object Query Capability
#@José A. Blakeley
#t1995
#cModern Database Systems
#index0
#*Transaction Management in Multidatabase Systems
#@Yuri Breitbart,Hector Garcia-Molina,Abraham Silberschatz
#t1995
#cModern Database Systems
#index1
预期输出:
OQL[C++]: Extending C++ with an Object Query Capability
Transaction Management in Multidatabase Systems
我尝试了什么
[^#*][a-z]\w+[\n$]
它没有读取字符串空格。
最佳答案
如果您想匹配字符串开头的 #
和 *
并获取后面的内容,您可以使用捕获组。注意获取字符类之外开头的字符并转义\*
。
要匹配空格,您可以使用以空格开头的重复模式。要匹配示例中的所有单词,您可以使用 character class允许匹配哪些字符。
^#\*([a-zA-Z][+:a-zA-Z\]\[]+(?: [+:a-zA-Z\]\[]+)*)
或者作为替代方案,使用积极的回顾:
(?<=^#\*)[a-zA-Z][+:a-zA-Z\]\[]+(?: [+:a-zA-Z\]\[]+)*
要匹配任何一个字符,您可以使用字符类
^#[*@c]([a-zA-Z][+:a-zA-Z\]\[]+(?: [+:a-zA-Z\]\[]+)*)
关于regex - 如何修复此字符串的正则表达式 "#*abc"我想匹配这个确切的字符串,其中 abc 也可以是任何包含空格的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141270/