我正在尝试使用regex从不同的字符串中提取信息。
例如,我有以下JSON:
{
"id": 1,
"title": "test", // comment
"cost": "$10",
}
并且希望编写一个正则表达式,将(1(冒号之前的文本、(2(逗号之前的文本,(3(逗号(如果存在(和(4(逗号之后的文本提取到捕获组中。
从逗号不可选开始,我提出了(.*?): (.*?)(,)(.*?)n
。
这是正确的。但是,我现在尝试通过添加?
:(.*?): (.*?)(,?)(.*?)n
来修改它,使逗号是可选的。这一点被打破了,通常应该在捕获组2和3中的内容转移到第4组。
如何修改正则表达式以防止这种情况发生?当逗号确实存在时,我希望修改后的版本与原始的非可选版本功能相同,当逗号不存在时,将冒号后的所有文本移到第2组。
让第二组捕获任何不是逗号也不是换行符的内容:
(.*?): ([^,nr]*)(,?)(.*?)n
请注意,正则表达式需要以n
结尾的行。这可能过于严格,因为文本的最后一行可能不会以n
结尾。还有一些文本使用r
或rn
作为换行符。您可能需要使用$
锚点,它也不会实际捕获换行符,但只是需要它。请与m
(多行(修饰符一起使用。