首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找丢失的ConfigureAwait的Regex

查找丢失的ConfigureAwait的Regex
EN

Stack Overflow用户
提问于 2016-04-19 06:57:24
回答 3查看 1.1K关注 0票数 5

我有一个要在Visual中搜索的特定模式。

基本上,我想搜索包含await但在语句末尾缺少ConfigureAwait的行。

我有一些在regex测试器中工作的模式,比如regex101.com,但是在Visual搜索中无法让这些模式工作。例如,模式(?s)^(.)*(await)((?!ConfigureAwait).)*(.)?(;)

我做错什么了?

编辑-我想在我的项目中找到行,例如

await DoSomeCoolThings(x, y); (即缺少ConfigureAwait(...).)

但我不想得到这样的线路匹配:

await DoSomeCoolThings(x, y).ConfigureAwait(false);

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-19 07:12:20

如果awaitConfigureAwait的顺序无关紧要,那么您可以使用

代码语言:javascript
复制
(?=.*\bawait\b)(?!.*\bConfigureAwait\b)

否则,如果您认为ConfigureAwait应该在await之后,您可以使用

代码语言:javascript
复制
(?=.*\bawait\b(?!.*\bConfigureAwait\b))

有效解

代码语言:javascript
复制
(?=\bawait\b(?!.*\bConfigureAwait\b))
票数 4
EN

Stack Overflow用户

发布于 2016-04-19 07:09:02

要将这些行与await匹配,但之后不使用ConfigureAwait,可以使用更简单的基于负前瞻性的regex:

代码语言:javascript
复制
.*\bawait\b(?!.*\bConfigureAwait\b).*

该模式将所有非换行符(.*)与整个单词await (因为\b是单词边界)进行匹配,然后执行检查,以确保在await之后的某个地方没有完整的单词ConfigureAwait (具有可查找性的(?!.*\bConfigureAwait\b)),然后行的其余部分与.*匹配。

由于await通常接近字符串的左侧,所以最好在开头使用惰性点匹配:

代码语言:javascript
复制
.*?\bawait\b(?!.*\bConfigureAwait\b).*
票数 1
EN

Stack Overflow用户

发布于 2018-02-26 13:47:07

我不认为我们应该被限制为一行,因为更复杂的语句可以分成多行。而且,解决方案最好是快速的。

为此,我们可以使用Resharper插件"ConfigureAwait检查器“,也可以使用以下正则表达式:

代码语言:javascript
复制
\bawait\b(?![^;]*ConfigureAwait)[^;]*;

这样做的目的是找到“等待”这个词,然后阅读整个语句直到分号;,只有当"ConfigureAwait“这个词在文本中缺失时才匹配。更具体而言:

  1. \bawait\b:整个单词“等待”。
  2. (?!...):负面展望,我们将使用它来排除已经有ConfigureAwait的匹配。
    • [^;]*ConfigureAwait:单词"ConfigureAwait",前面有许多不是分号的字符。

  1. [^;]*:任何不是分号的字符。
  2. 分号。

在语句包含查询字符串(带有分号)或lambda (带有分号)的情况下,我得到了一些小错误。他们很容易被忽视,以至于我觉得不值得再让判决复杂化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36710724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档