【问题标题】:Perl regex matching: Match string with single word only, how to use negative lookbehind lookahead as wellPerl 正则表达式匹配:仅匹配单个单词的字符串,以及如何使用否定的lookbehind lookahead
【发布时间】:2016-09-02 02:05:49
【问题描述】:

在尝试让这个正则表达式工作时,我真的筋疲力尽。我在 sas 中使用 perl 正则表达式。如果有人可以帮助我,我将不胜感激。我有三个问题,考虑以下几行文字(行号仅供参考):

1 weight
2 weightchange
3 weight change
4 weight percentile
5 change weight
6 percentile weight
7 **** weight pre op
8 water weight
9 weight percentile
10 myocardial infarction
  1. 如何使用正则表达式匹配1 而不是2-9? (是一种同时匹配开头和结尾的单词的方法吗?)

  2. 如何使用正则表达式和负前瞻/后瞻断言来匹配1,然后明确排除2-6

  3. 如何修改适合解决 Q2 的正则表达式,然后排除 78

额外问题:您花了多长时间熟练地使用正则表达式?

谢谢!

【问题讨论】:

  • SO 不是免费的编码服务。如果您已经为此工作了一周,那么您肯定会进行一些接近您想要的尝试。发布它们,然后我们可以帮助您修复它们。但我们不会为你做这件事。
  • 第一季度你不能用^weight$吗?
  • 如图所示,您的 (1) 很简单 (/^weight\s*$/) ...然后问题是 (2) 和 (3) 不相关 - 你不不需要所有这些来区分它们。如果你真的想要它,作为练习,它是环视的基本使用。例如,/weight(?!\s*(?:change|percentile))/ 让它匹配 weight 后面没有列出的单词等。 // 这需要经验,所以需要几年。但是,您可以非常快速地学习基础知识,以便非常充分地使用。 // 最重要的是:请让您的问题更加具体——告诉我们什么令人困扰,告诉我们您做了什么。
  • 从这个问题看来,您可能需要彻底从一些介绍性文本开始阅读。 perlretut 很好,我认为尤其是lookarounds 上的部分。还有许多其他来源。更好的是,也许是你最喜欢的 Perl 书中的一章。如果您想通过四处寻找来“弄清楚”,那可能会很困难。我会说,先阅读它然后玩。
  • 更正上面评论中的第一个例子——因为你的字符串可能在开头有空格,你需要/^\s*weight\s*$/

标签: regex string perl sas


【解决方案1】:

1) @Barmar 已经提到过:^weight$ 可以满足您的要求。你确定那是你想要的,即“重量”在一条线上吗?

2) 你可以做类似/(?<!percentile )(?<!change )weight(?! ?change| percentile)/ 的事情。负后视不能写成(?<!change |percentile ),因为 RE 引擎不支持可变宽度后视,但由于匹配是零宽度,您可以单独列出它们。不过,所有这些看起来都非常具体。它会失败,例如如果您的文本包含这些由换行符分隔的单词。

3) 只需为****water 添加另一个否定的lookbehind。

我不太擅长正则表达式 :) 而且我从来没有坐下来决定学习来龙去脉,如果没有用例,那将毫无用处;你很快就会忘记它。现在我已经使用 regexen 20 多年了,我还在学习新东西,比如几周前如何匹配 Unicode 属性。

【讨论】:

  • 技术上,^weight\z for #1 as ^weight$ 匹配 "weight""weight\n"
  • 非常感谢。抱歉,我没有包含更多我尝试过的内容。然而,^weight$ 没有成功,令我惊讶的是(正则表达式代码经常出现这种情况)与列表中的任何内容都不匹配。我试图修改代码: /(?
  • 该更改意味着您要求“重量”同时位于“百分比”和“更改”之前,这没有意义,因为实际上只有其中一个可以存在。所以这永远不会匹配任何东西。单独的前瞻可以工作,因为它包含一个交替,所以 change 有或没有前面的空格,或 percentile 都将被允许。
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2022-07-20
  • 2016-12-06
  • 1970-01-01
  • 2011-12-13
  • 2021-05-23
相关资源
最近更新 更多