问题描述
我正在使用AutoRest生成客户端代码。使用AutoRest,您可以添加自定义转换脚本来更改生成的代码。
我正在尝试从使用Javascript正则表达式替换生成的代码中删除两个接口属性。但是我不知道正确的正则表达式是什么。
这是我需要更改的一部分代码:
// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>
namespace Test.AcmeWeb.Repositories.Test.Products
{
using Microsoft.Rest;
using Models;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
/// <summary>
/// Acme Products API
/// </summary>
public partial interface IApiProducts : System.Idisposable
{
/// <summary>
/// The base URI of the service.
/// </summary>
System.Uri BaseUri { get; set; }
/// <summary>
/// Gets or sets json serialization settings.
/// </summary>
JsonSerializerSettings SerializationSettings { get; }
/// <summary>
/// Gets or sets json deserialization settings.
/// </summary>
JsonSerializerSettings DeserializationSettings { get; }
/// <summary>
/// CreateAppointment
/// </summary>
/// <remarks>
/// Creates an appointment,given a timeslot id,order id and remark,/// wrapped in a requestmodel.
/// </remarks>
/// <param name='label'>
/// Possible values include: 'default','Acme'
/// </param>
/// <param name='body'>
/// </param>
/// <param name='customHeaders'>
/// The headers that will be added to request.
/// </param>
/// <param name='cancellationToken'>
/// The cancellation token.
/// </param>
Task<HttpOperationResponse<ErrorResponse>> ApiProductsAppointmentsCreateAppointmentPUTWithHttpMessagesAsync(string label,RequestDataAppointmentRequestModel body = default(RequestDataAppointmentRequestModel),Dictionary<string,List<string>> customHeaders = null,CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Gets or sets json serialization settings.
/// </summary>
JsonSerializerSettings SerializationSettings { get; }
/// <summary>
/// Gets or sets json deserialization settings.
/// </summary>
JsonSerializerSettings DeserializationSettings { get; }
我可以运行两个单独的regex replace调用,一次将其替换一次。目前,第一行的正则表达式如下所示:
\/\/\/ <summary>\r\n[\s]+\/\/\/Gets or sets json serialization[^]+JsonSerializerSettings SerializationSettings { get; }
但是不幸的是,这似乎与任何模式都不匹配。
我如何更改我的正则表达式才能使它正常工作?
现场演示可以在这里找到:https://regexr.com/5eleb
解决方法
文本中有序列化和反序列化功能,您可以在\r
中将\r\n
设置为可选
要匹配两个部分,可以使用
\/\/\/ <summary>\r?\n[^\S\r\n]*\/\/\/ Gets or sets json (?:de)?serialization.*\r?\n[^\S\r\n]*\/\/\/ <\/summary>\r?\n[^\S\r\n]*JsonSerializerSettings (?:De)?[sS]erializationSettings { get; }\s*
说明
-
\/\/\/ <summary>\r?\n
匹配摘要部分的开头 -
[^\S\r\n]*\/\/\/
匹配不带换行符的可选空白字符和///
-
Gets or sets json (?:de)?serialization.*\r?\n
将文本与可选的de
匹配,其余行包括换行符 -
[^\S\r\n]*\/\/\/ <\/summary>\r?\n
匹配可选的空白字符,///
和最后一个包括换行符的摘要部分 -
[^\S\r\n]*JsonSerializerSettings
匹配可选的空白字符,后跟JsonSerializerSettings
,两者都是 -
(?:De)?[sS]erializationSettings { get; }\s*
匹配可选的De
,然后匹配大写或小写s
,后跟erializationSettings
和该行的其余部分。\s*
将匹配尾随空白字符,包括换行符
在替换中,使用一个空字符串。
您也可以将其作为一个块进行匹配,但是在您尝试的模式中,它没有考虑结尾摘要部分。您还必须使[^]+?
不贪婪,以防止过度匹配。
\/\/\/ <summary>\r?\n[\s]+\/\/\/ Gets or sets json (?:de)?serialization[^]+?JsonSerializerSettings (?:De)?[sS]erializationSettings { get; }