【问题标题】:Regex to find string starting with % and ending with .DESCR正则表达式查找以 % 开头并以 .DESCR 结尾的字符串
【发布时间】:2016-06-08 16:57:31
【问题描述】:

我在 Notepad++ 中加载了一个非常大的源代码文件,我正在尝试使用它的正则表达式搜索功能来查找所有使用属性的地方。

我需要找到所有设置了属性DESCR 的地方。我尝试在不使用正则表达式的情况下仅搜索 .DESCR,但结果太多,我无法筛选。我知道我要查找的代码将以%This.& 和一些变量名开头,然后是.DESCR =

我尝试使用RegExr 来构造正则表达式,但它没有找到我想要的字符串。我查看了here 以尝试更多地了解正则表达式,但我仍然缺少一些东西。

编辑:更多描述 以下是我要查找的示例:
%This.oPosition.DESCR = &DATAREC.Y_BUSINESS_TITLE.Value;
%This.data.DESCR = "";
&data.DESCR = "Analyst";
&oPosition.DESCR = &DATAREC.DESCR.Value;

但是,它不应该匹配这些:
&P_NODE_PIN_DESCR = &NODE_PIN_DESCR;
&qLang.Descr = &sDescr;

我知道我是方式,但这是我尝试过的:

(\%This\.|\&[A-Z]+)\.DESCR = 这没有收到任何东西。
\%This.|\&(A-Z)+.DESCR 这收到了%This 但没有任何后续,也没有找到任何以& 开头的内容。
\%This.\w.DESCR =|\&\w+.DESCR = 它看起来它正在使用 RegExr,但它在 Notepad++ 中不正确匹配(它匹配 &ACCT_DESCR = 之类的东西)

我只是对正则表达式不够熟悉,无法理解我缺少什么。

编辑: Notepad++ 搜索设置:

【问题讨论】:

  • 您能否提供一些您想要匹配的样本。你确定你检查了正则表达式作为搜索模式吗?
  • @SebastianProske 帖子已编辑。如果您需要更多信息,请告诉我。

标签: regex notepad++


【解决方案1】:

您可以根据您的描述搜索(?:%this\.|&)\w+\.DESCR =。请在搜索对话框中取消勾选匹配大小写(除非您只搜索This,而不是this 或类似名称。

  • (?:%this\.|&) 匹配 %this.& 两者的字面意思(但不区分大小写)
  • \w+ 匹配一个或多个单词字符,例如字母、数字或下划线。您也可以使用 [a-z]+ 来更严格,只考虑字母 - 或在搜索区分大小写时使用 [a-zA-Z]+
  • \.DESCR = 从字面上匹配 .DESCR =。如果只想匹配 DESCR 区分大小写,可以使用内联修饰符来区分大小写:\.(?-i)DESCR =

【讨论】:

  • 因此,当我在 Notepad++ 中删除区分大小写时,它还会找到我不想要的 qLang.Descr = 之类的东西。我该如何解决?
  • @CacheStaheli 查看我对内联修饰符的编辑
【解决方案2】:

这就是你的尝试没有成功的原因:

  1. 您只检查小写字母。 [A-Z] 需要勾选 [a-zA-Z] 或使用不敏感修饰符 /i (本例由“匹配大小写”复选框表示

  2. 当使用 the 或 simple 时,它​​指的是它之后的所有内容,直到它到达末尾或一个右括号

这是您需要的正则表达式

(\%This\.|\&)[A-Za-z]+\.DESCR

如果您只想捕获 .DESCR,您可以像这样使用这个非捕获组:

(?:(?:\%This\.|\&)[A-Za-z]+)(\.DESCR)

然后您可以使用反向引用 $1 或 \1 来替换这些特定外观中的 .DESCR

https://regex101.com/r/fW9lZ2/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2017-09-17
    相关资源
    最近更新 更多