【发布时间】:2023-03-18 08:06:02
【问题描述】:
我在记事本++中工作
在我正在使用的文件中有一个[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])(?<!\r\n)\d{2}-\d{4}(?!\d),见regex101.com/r/G3JocW/2 -
您可以使用这个正则表达式:
(?<!^|\d)[0-9][0-9]-[0-9][0-9][0-9][0-9](?!\d)记得在 Notepad++ 查找和替换工具上激活多行模式。 -
@WiktorStribiżew,这会跳过电话号码,但在 SSN 上仍然匹配
-
@horcrux,Notepad++ 抱怨这是一个无效的正则表达式
-
请更新问题以查看数字边界在哪里失败。实际上,在我的正则表达式中,
(?<!\r\n)变得多余并且可以被删除。(?<=[^\d\r\n])\d{2}-\d{4}(?!\d)会起作用。