Regex 使用正则表达式基于肯定条件选择行,但基于否定条件排除某些行
如果在某个地方有答案,我很抱歉,但是如果有,我的搜索技能已经失败了 我正在使用UltraEdit,我需要从一些JSON模式中删除一些行,以便于比较 鉴于以下情况:Regex 使用正则表达式基于肯定条件选择行,但基于否定条件排除某些行,regex,perl,ultraedit,Regex,Perl,Ultraedit,如果在某个地方有答案,我很抱歉,但是如果有,我的搜索技能已经失败了 我正在使用UltraEdit,我需要从一些JSON模式中删除一些行,以便于比较 鉴于以下情况: "PaymentMethod": { "$id": "/properties/PaymentMethod", "items": { "$ref": "PaymentMethod.json" },
"PaymentMethod": {
"$id": "/properties/PaymentMethod",
"items": {
"$ref": "PaymentMethod.json"
},
"type": "array"
}
使用此正则表达式:
^.*\".*\"\: \".*$\r\n
选择以下行:
"$id": "/properties/PaymentMethod",
"$ref": "PaymentMethod.json"
"type": "array"
我需要做的是跳过$ref行
我曾尝试通过各种方式使用(?!json)和选择标准来实现负面环顾,但都失败了
其目的是删除选定的行
谢谢你的帮助
更新:
为了澄清,我想删除一些与我的正则表达式找到的条件相匹配的行,但我不想删除$ref行。
所以我希望找到一种相对简单的方法,在UltraEdit中使用直接的perl正则表达式来实现这一点
我已经用Python脚本创建了一个变通方法,这样我就可以完成我的工作,但如果有办法做到这一点,那还是很有意思的。:) 如果您不想在初始引号后添加
$ref
:
^.*\"(?!\$ref).*\"\: \".*$\r\n
请看这里:
或者根据行末尾的.json“
排除:
^.*\".*\"\: \".*(?<!\.json")$\r\n
^.*\.*\:\”*(?,您可能应该使用[^\n”]*
,这将阻止使用换行符或“
”。您的正则表达式与”类型匹配:“数组”
,例如。使用JSON模块直接操作数据将是一个更健壮的解决方案,但编辑JSON文件的一种笨拙的方法是在命令行上运行它
同样,这不是处理JSON的好方法,但它可能适合您的特殊情况
perl -ne 'print unless /"\$ref:"/' file.json > new_file.json
不要编写自己损坏的解析器;使用现有的解析器
use Cpanel::JSON::XS qw( decode_json );
my $json_utf8 = '...';
my $data = decode_json($json_utf8);
my $payment_method = $data->{PaymentMethod};
my $id = $payment_method->{'$id'};
my $item = $payment_method->{items}{'$ref'};
my $type = $payment_method->{type};
我想他可能是想标记PCRE而不是perl本身,尽管我可能弄错了。我在UltraEdit中使用perl设置。您是使用$id
和$ref
作为不同字符串的占位符,还是它们实际上是$id
和$ref
?这是一个JSON模式的片段,$id是URI定义on while$ref指定在模式中的该点使用不同的JSON文件。我不是说值,而是键。它实际上是3个字符$
、I
、d
和4个字符$
、r
、e
、f
,还是用于匿名化实际数据$ref和$id的字符串d JSON模式关键字。我认为这意味着使用了$id
和$ref
,这简化了答案。我包括行的结尾,因为我实际上是通过将它们替换为null来删除这些行。@user1459463-但您希望显式地这样做,而不是在正则表达式中的任何地方。请参阅:UltraEdit可能没有SingleL默认情况下,行是打开的(
匹配换行符),但是您可以禁用此设置并使用[^”]
查看“非”
”是否包含换行符。然后尝试*?
和[^”\n]*
和[^”\n]*?
查看行为的变化。