我想使用正则表达式从文件中读取特定字符之间的多个字符串。我尝试了以下代码,但无法获得预期的结果。
我的输入文件包含以下格式的数据:
#*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$]
它不读取字符串空格。
如果要在字符串的开头匹配#
和*
并获取以下内容,则可以使用捕获组。请注意,要获取字符类之外的开头字符并转义*
。
为了匹配空格,您可以使用以空格开头的重复模式。若要匹配示例中的所有单词,可以使用字符类来允许匹配哪些字符。
^#*([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][]+)*)
正则表达式演示
试试这个正则表达式。 它将在#*
、#c
、#@
之后捕获:
#[*c@]K[S].*$
这是演示
这是您正在寻找的正则表达式:
^#*(.*)$
你可以在这里测试
解释:
^ // start at the beginning of the line
#* // match the literal '#*'
(.*) // match any character that follows
$ // until the end of the line