regex - 比赛号码以 1 结尾,但以 11 结尾时除外
问题描述
我需要匹配以 1 结尾的任何数字,但以 11 结尾的数字除外。我使用 awk。为了说明,正确的工作行是:
if ( max ~ /1$/ && max !~ /11$/ ) { print max }
或使用正则表达式:
if ( max ~ /[^1]1$|^1$/ ) { print max }
或相同正则表达式的慢得多的变体:
([^1]|^)1$
我实际上怀疑这一部分(经过修改)应该以某种方式工作。它很好,简短易读,比上述组合的步骤少得多,适用于所有多于 2 位的数字,但对于 1 本身则失败。我在上面修复了,但更喜欢更好的(如果有的话)。我实际上需要它来处理 1 到 3 位数字,但不希望限制它。
[^1]1$
一旦我尝试使用量词来修复它,它就无法正常工作。它要么开始选择前导 1(例如 1211 匹配但它不应该匹配),要么丢失单个数字 1 作为匹配。显然,我的问题在于我必须匹配数字的结尾。如何制作更好的正则表达式?
测试用例:匹配数字为:
1
21
31
121
131
1021
跳过(不匹配)以 11 结尾的数字,例如:
11
111
211
1011
1211
解决方案
如果您的 Input_file 与所示示例相同,那么以下内容awk
可能会对您有所帮助。
awk '/[02-9]1$/||/^1$/' Input_file
假设以下是示例 Input_file。
cat Input_file
1
2001
21
31
121
131
1021
11
111
211
1011
1211
然后运行代码后将输出以下内容。
awk '/[02-9]1$/||/^1$/' Input_file
1
2001
21
31
121
131
1021
推荐阅读
- dialogflow-es - 我们如何在 Google Dialog flow Chatbot 中将 Web 链接添加为按钮
- go - 如何中断系统调用
- python - 如何以总百分比获得我训练的 .clf 模型的识别准确率?
- javascript - NodeJS中类似于CSharp函数的AES加密方法
- php - 从href中删除双引号
- java - 如果需要,Java 创建文件和目录
- r - 如何在 anova 上执行事后测试
- android - 在 Android 10 上实施人脸解锁的设备的安全性
- ruby-on-rails - 使用构建工厂而不是创建的 RSpec 错误 - 预期已更改 1,但已更改为 0
- php - Laravel Passport 注册错误响应