Perl正则表达式匹配:仅将字符串与单个单词匹配,如何使用负向后观察前瞻

时间:2016-09-02 02:05:50

标签: regex string perl sas

我真的很累,试图让这个正则表达式工作。我在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

  4. 奖金问题:使用正则表达式让需要多长时间?

    谢谢!

1 个答案:

答案 0 :(得分:1)

1)@Barmar已经提到过:^weight$可以做你所要求的事情。你确定你想要的是什么,即"体重"在一条线上?

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

3)只需为****water添加另一个负面的lookbehind。

我对正则表达式并不是那么擅长:)我从来没有坐下来决定学习如果你没有用例那么无用的东西;你会在短时间内忘记它。现在我已经使用regexen超过20年了,我还在学习新的东西,比如几周前如何匹配Unicode属性。