首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择符合数值条件的记录的正则表达式

选择符合数值条件的记录的正则表达式
EN

Stack Overflow用户
提问于 2022-04-13 13:54:39
回答 2查看 48关注 0票数 0

我需要实现一个正则表达式,该表达式给出了以下示例数据集,允许我选择那些在2000年1月之前出生的学生记录,其课程成绩高于1.7。例如,下面示例中的命令的结果应该是第二条记录

代码语言:javascript
复制
id, date of birth, grade, explusion, serious misdemeanor
123,2005-01-01,5.36,1,1
582,1999-10-12,8.51,0,1
9274,2001-25-12,9.65,0,0

我尝试了以下方法,但在执行后没有得到任何结果。

代码语言:javascript
复制
grep -E "^*,1[0-9]{3}(-[0-9]{2}){2}*[10],(1\.[7-9][1-9])]"

知道怎么回事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-13 14:30:38

使用grep,您可以将整个模式写成

代码语言:javascript
复制
grep -E '^[0-9]+,1[0-9]{3}-[0-9]{2}-0?1,(1\.(7[1-9][0-9]*|[89][0-9]*)|[2-9](\.[0-9]+)?|10(\.0+)?),[0-9]+,[0-9]+$' file
  • 字符串的^开始
  • [0-9]+,匹配id的1+数字和,
  • 1[0-9]{3}-匹配1位数,3位数字和-
  • [0-9]{2}-0?1,匹配2位数字-,1月份匹配01或1
  • (集团的替代品
    • 1\.(7[1-9][0-9]*|[89][0-9]*)匹配1.71-1.79或1.8或1.9,后面都是可选数字
    • |
    • [2-9](\.[0-9]+)?匹配2-9可选地后面跟着.和1+数字。
    • |
    • 10(\.0+)?匹配10,其次是.和0(假设10是最高等级)

  • ),关闭组并匹配逗号
  • [0-9]+,[0-9]+匹配最后两个列值,假设1+位数
  • 字符串的$末端

请参阅regex演示巴什演示

票数 1
EN

Stack Overflow用户

发布于 2022-04-13 14:12:34

在你的判断中,我找不到一月的部分,而且分数看上去也不对。这里有一个简单的例子:

代码语言:javascript
复制
grep -E '1...-..-01,([2-9]\.)|(1\.[7-9][1-9])'

解释:

代码语言:javascript
复制
1...-..-01     year=1xxx, month=01
[2-9]\.|       grade 2-9 or
1.[7-9][1-9]   grade 1.7[1-9]

假设grade < 10 (可以很容易更改)。

awk稍微简单一点:

代码语言:javascript
复制
awk -F[,-] '$2<2000 && $4=="01" && $5 > 1.7'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71858725

复制
相关文章

相似问题

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