这与this问题有关。
这是一个正则表达式:(?<key>[^:\s]+): (?<value>(?>[^\n]*\R)*?[^\n]*)(?=\R\S+:|$)
。
它应解析多行“key:value”对,但有一个例子未正确解析。
请你帮我修改这个原始的正则表达式。
示例,正则表达式和错误在这里(查看未着色的行):http://regex101.com/r/sH9lP9
ОПИСАНИЕ
应该是关键
Fолько: РФ: Квартира `в` хорошем ~ 1500 ~`!@#$%^&*'()_+=-\|</>{.}
fdsdf[,]";:? состояние. по - оплате 25000+К/У`
应该是值。
答案 0 :(得分:1)
你的正则表达式在冒号后面有一个空格,这需要在“key:value”对中冒号之后有一个空格。如果你看一下你的例子,一行不匹配,在冒号后面有一个问号,而不是空格,这使得它不匹配。
您可以使用以下解决方案之一:
(?<key>[^:\s]+): ?(?<value>(?>[^\n]*\R)*?[^\n]*)(?=\R\S+:|$)
在空格可选后添加问号,或者:
(?<key>[^:\s]+):\s*(?<value>(?>[^\n]*\R)*?[^\n]*)(?=\R\S+:|$)
在冒号之后吃掉所有可能的空格,这可能是最好的,因为它使得对空格的使用不那么严格。
或者,如果问题是需要空格并且整行应该是前一个键的值的一部分,那么您应该向子模式添加空间以确定值的结束。换句话说,你可以改变它(在末尾添加':'之后的空格):
(?<key>[^:\s]+): (?<value>(?>[^\n]*\R)*?[^\n]*)(?=\R\S+: |$)