regex - 正则表达式查找前面没有回车/换行符的字符串模式的实例
问题描述
我正在使用记事本++
在我正在使用的文件中,有一个字符串模式[0-9][0-9]-[0-9][0-9][0-9][0-9]|
,每行都应该以它开头,紧接着是一个管道。(这里需要注意的是:该模式在四位数字之后最多可以有三个大写字母。例如 00-1324A| 或 12-3456STR|)。
在文件中的某些实例中,该模式位于一行的中间,需要移至下一行。
例子:
00-1234REV|The quick brown fox jumped over the lazy dog|Test
11-6544|FooBar|text99-8656ST|This needs to be on the next line|some text
45-8737|Peter pipe picked a peck of pickled peppers|TEST2
正如我在示例中所指出的,99-8656ST
需要移至下一行,结果如下:
00-1234REV|The quick brown fox jumped over the lazy dog|Test
11-6544|FooBar|text
99-8656ST|This needs to be on the next line|some text
45-8737|Peter pipe picked a peck of pickled peppers|TEST2
我目前有这个正则表达式:(?<=[^\d\r\n])\d{2}-\d{4}(?!\d)
但这与一行中间的部分社会安全号码相匹配:
123-45-6789
我的正则表达式将在45-6789
.
解决方案
由于纯数字边界在这里不起作用,您可以在左侧添加一个数字+连字符的检查。右边的边界很清楚,它是零到三个大写字母,后跟一个竖线。
这意味着,您可以使用
(?<=[^\d\r\n])(?<!\d-)\d{2}-\d{4}(?=[A-Z]{0,3}\|)
请参阅正则表达式演示。详情:
(?<=[^\d\r\n])
- 紧靠左边,必须有一个除数字、CR、LF 以外的字符(?<!\d-)
- 紧靠左边,应该没有数字 +-
\d{2}-\d{4}
- 两位数,-
, 四位数字(?=[A-Z]{0,3}\|)
- 紧随其后的是 0 到 3 个大写字母,然后是文字|
字符。
如果左侧边界可以是单个连字符或数字,则替换(?<=[^\d\r\n])(?<!\d-)
为(?<=[^\r\n\d-])
。
推荐阅读
- c# - 如何使用 LibVlcSharp 去除 videoView 中的视频黑带?
- ruby-on-rails - 带有 Cocoon 的动态表单 - NilClass:Class 的未定义方法“reflect_on_association”:
- android - 无法使用 RobolectricTestRunner 和 Koin 运行单元测试
- jquery-ui - Jqueryui datepicker change class onselect doesn´t work
- pytorch - 在pytorch中实现将旋转矩阵转换为旋转向量
- amazon-web-services - 将弹性 IP 与 AWS 负载均衡器结合使用
- python - Python 另一个嵌套列表
- python-3.x - 在python中提取两个列表之间的最长公共路径
- java - Android: OnClick not work when override onClick in customView
- networkx - networkx ego_graph 适用于 geopandas 系列加速