I have data in a non-standard format which I am trying to convert to intelligible json.
Format is like
dataheads@first{
first_data = <value1@123 value2_456 value3_789>;
second_data = <<value4_abc_123 value5_ty>>;};
I need in this step:
first_data = <value1@123,value2_456,value3_789>;
second_data = <<value4_abc_123,value5_ty>>;
I tried Regex.Replace(contents, @"(<.*)\ (.*>)", "$1,$2"); but it only works for a single space between <>. \S*(\s)\S* messes up data outside <>. I am not sure why <\S*(\s)\S*> doesn't work. As can be seen, there are a lot more substitutions needed to convert to json so have to be careful not to mess the outsides.
CodePudding user response:
You can use this regex:
@"((?<=<[^>]*)[ ](?=[^>]*>)) "
Explanation:
( - start group
(?<=<[^>]*) - look behind for < followed by zero or more characters not being >
[ ] - match a space
(?=[^>]*>) -look ahead for zero or more characters not being > followed by >
) - repeat this group
Simply replace with ,.
Update:
You can secure the matches further, so it requires the hardcoded values before the space, by including them in the look ahead, like this:
@"((?<=<[^>]*(@123|_456|_789|_abc_123|_ty))[ ](?=[^>]*>)) ");
