Regex.Escape - 抛出的异常:'System.ArgumentNullException' in System.Text.RegularExpressions.dll in C#
Regex.Escape - Exception thrown: 'System.ArgumentNullException' in System.Text.RegularExpressions.dll in C#
我有正则表达式来匹配输入字符串,但是当输入字符串为空时,我得到以下错误
Exception thrown: 'System.ArgumentNullException' in System.Text.RegularExpressions.dll
我的方法是这样的
public async Task<PagedResult<Transaction>> Find(FindTransactionQuery query, CancellationToken cancellationToken)
{
var recipientFirstNameFilter =
BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Recipient.FirstName, new($"/.*{ Regex.Escape(query.RecipientFirstName)}.*/i")), query.RecipientFirstName);
var senderFirstNameFilter =
BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Sender.FirstName, new($"/.*{Regex.Escape(query.SenderFirstName)}.*/i")), query.SenderFirstName);
//& so on
}
private static FilterDefinition<Transaction> BuildFilterDefinition(FilterDefinition<Transaction> transactionFilter, string searchText) =>
string.IsNullOrWhiteSpace(searchText)
? Builders<Transaction>.Filter.Empty
: transactionFilter;
我尝试如下使用条件运算符,但不允许:
var recipientFirstNameFilter = BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Recipient.FirstName,
//here
new($"/.*{query.RecipientFirstName!= null ? Regex.Escape(query.RecipientFirstName) :query.RecipientFirstName}.*/i")), query.RecipientFirstName);
是的,一种解决方案是再添加一个变量 *& 检查空值,但为此引入一个额外的变量并没有多大吸引力。
有什么类似的我可以做的吗!?? (Not Null) & 然后构建 Regex?
谢谢!
当使用字符串插值时,:
表示格式:
// Here we want 4 digits after decimal point
string demo = $"{Math.PI:f4}";
这就是为什么字符串插值 中的裸 三元运算符 无法编译 :
// Compile time error
string demo = $"{Math.PI > 3 ? 'T' : 'F'}";
.Net 抱怨格式错误(此处为 'F'
)规范。解决方案是使用 (...)
// Now it's correct
string demo = $"{(Math.PI > 3 ? 'T' : 'F')}";
你的情况
new($"/.*{(query.RecipientFirstName!= null ? Regex.Escape(query.RecipientFirstName) : "")}.*/i")), query.RecipientFirstName);
或(如果我们在 ??
的帮助下检查 Regex.Escape
内的 null
:
new($"/.*{Regex.Escape(query?.RecipientFirstName ?? "")}.*/i")), query.RecipientFirstName);
我有正则表达式来匹配输入字符串,但是当输入字符串为空时,我得到以下错误
Exception thrown: 'System.ArgumentNullException' in System.Text.RegularExpressions.dll
我的方法是这样的
public async Task<PagedResult<Transaction>> Find(FindTransactionQuery query, CancellationToken cancellationToken)
{
var recipientFirstNameFilter =
BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Recipient.FirstName, new($"/.*{ Regex.Escape(query.RecipientFirstName)}.*/i")), query.RecipientFirstName);
var senderFirstNameFilter =
BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Sender.FirstName, new($"/.*{Regex.Escape(query.SenderFirstName)}.*/i")), query.SenderFirstName);
//& so on
}
private static FilterDefinition<Transaction> BuildFilterDefinition(FilterDefinition<Transaction> transactionFilter, string searchText) =>
string.IsNullOrWhiteSpace(searchText)
? Builders<Transaction>.Filter.Empty
: transactionFilter;
我尝试如下使用条件运算符,但不允许:
var recipientFirstNameFilter = BuildFilterDefinition(Builders<Transaction>.Filter.Regex(_ => _.Recipient.FirstName,
//here
new($"/.*{query.RecipientFirstName!= null ? Regex.Escape(query.RecipientFirstName) :query.RecipientFirstName}.*/i")), query.RecipientFirstName);
是的,一种解决方案是再添加一个变量 *& 检查空值,但为此引入一个额外的变量并没有多大吸引力。
有什么类似的我可以做的吗!?? (Not Null) & 然后构建 Regex?
谢谢!
当使用字符串插值时,:
表示格式:
// Here we want 4 digits after decimal point
string demo = $"{Math.PI:f4}";
这就是为什么字符串插值 中的裸 三元运算符 无法编译 :
// Compile time error
string demo = $"{Math.PI > 3 ? 'T' : 'F'}";
.Net 抱怨格式错误(此处为 'F'
)规范。解决方案是使用 (...)
// Now it's correct
string demo = $"{(Math.PI > 3 ? 'T' : 'F')}";
你的情况
new($"/.*{(query.RecipientFirstName!= null ? Regex.Escape(query.RecipientFirstName) : "")}.*/i")), query.RecipientFirstName);
或(如果我们在 ??
的帮助下检查 Regex.Escape
内的 null
:
new($"/.*{Regex.Escape(query?.RecipientFirstName ?? "")}.*/i")), query.RecipientFirstName);