Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式是否找到双字母的多个实例?_Regex_Linux - Fatal编程技术网

Regex 正则表达式是否找到双字母的多个实例?

Regex 正则表达式是否找到双字母的多个实例?,regex,linux,Regex,Linux,我有一个上面格式的文本文件codes.txt,里面充满了代码。标准是第二列必须有两个连续的字母才能提取;因此,由于2有FD,4有TH,这两行将被提取到另一个文件results.txt中。我可以使用什么RegEx命令来完成此任务?下面的解决方案可能适合您: codes.txt 1. 29250X 90 3 ASM123NO48JHF3M344 2. 29250X FD 3 DFWO3957NSTCVIKERH 3. 292505 3R 4 PGHU35N77P10C8WE0W 4. 292505

我有一个上面格式的文本文件codes.txt,里面充满了代码。标准是第二列必须有两个连续的字母才能提取;因此,由于2有FD,4有TH,这两行将被提取到另一个文件results.txt中。我可以使用什么RegEx命令来完成此任务?

下面的解决方案可能适合您:

codes.txt

1. 29250X 90 3 ASM123NO48JHF3M344
2. 29250X FD 3 DFWO3957NSTCVIKERH
3. 292505 3R 4 PGHU35N77P10C8WE0W
4. 292505 TH 4 8RJRO239F0117R5MFY
守则:

1. 29250X 90 3 ASM123NO48JHF3M344
2. 29250X FD 3 DFWO3957NSTCVIKERH
3. 292505 3R 4 PGHU35N77P10C8WE0W
4. 292505 TH 4 8RJRO239F0117R5MFY
results.txt中的输出

import re

f = open('./codes.txt', 'r')
lines = f.readlines()
f.close()
f = open('./results.txt', 'w')

pa = re.compile(r' [a-zA-Z]{2} ')

for l in lines:
  m = pa.search(l)
  if m and m.group(0):
    f.write(l)
    #print(l, end="")

f.close()

为了消除误报,我会尽可能多地匹配该行

2. 29250X FD 3 DFWO3957NSTCVIKERH
4. 292505 TH 4 8RJRO239F0117R5MFY
Regex解释说:

egrep '^[0-9]+\. .{6,} [A-Z]{2} [0-9] .+' codes.txt > results.txt

你试过什么?它是怎么失败的?我试过[A-Z][A-Z]{8-9}但那似乎没有任何作用。你在用什么程序和语法?我知道没有程序接受[A-Z][A-Z]{8-9}作为正则表达式。也许您想使用perl-ple“print if/[A-Z][A-Z]/”?这将匹配两个字母后跟“{8-9}”。你可能想用{8,9}量词来代替八到九次出现,但我看不出这对你有什么帮助。@Corion grep至少对BRE有帮助,它只是逐字解释{8-9}
^         Anchor to the beginning of the line
[0-9]+    Match 1 or more numbers
\.        Followed by a period and a space
.{6,}     Followed by at least 6 but maybe more characters and a space
[A-Z]{2}  Followed by 2 Capital letters and a space
[0-9]     Then a digit and a space
.+        Then 1 or more characters