Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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
Python 基于正则表达式中的相同值选择组_Python_Regex - Fatal编程技术网

Python 基于正则表达式中的相同值选择组

Python 基于正则表达式中的相同值选择组,python,regex,Python,Regex,我有以下内容 ONE 1234234534564 123 34erewrwer323 123 123fsgrt43232 123 TWO 42433412133fr 234 fafafd3234132 342 THREE sfafdfe345233 3234 FOUR 324ereffdf343 4323 fvdafasf34nhj 4323 fsfnhjdgh342g 4323 考虑到1、2、3和4是独立的组。我只想匹配1和4,基于每个组中每一行的第二个值

我有以下内容

ONE
1234234534564   123
34erewrwer323   123
123fsgrt43232   123
TWO
42433412133fr   234
fafafd3234132   342
THREE
sfafdfe345233   3234
FOUR
324ereffdf343   4323
fvdafasf34nhj   4323
fsfnhjdgh342g   4323
考虑到
1、2、3和4
是独立的组。我只想匹配
1
4
,基于每个组中每一行的第二个值必须相同的条件,并且它将匹配其中有多行的组。在正则表达式中如何实现这一点

我已经试过跟随正则表达式,但它没有达到标准

\w+\n\w+\t(\d+)(\n\w+\t\1){2,}
你可以用

r'(?m)^[A-Z]+\r?\n\S+\s+(\d+)(?:\r?\n\S+\s+\1)+$'

详细信息

  • (?m)
    -启用
    re.MULTILINE
    模式,使
    ^
    /
    $
    分别匹配行的开始和结束
  • ^
    -行的开头
  • [A-Z]+
    -1+大写ASCII字母(根据需要调整)
  • \r?\n
    -像CRLF或LF这样的换行符
  • \S+
    -1+非空白字符
  • \s+
    -1空格(如果选项卡是字段分隔符,则使用
    \t
  • (\d+)
    -捕获组1的一个或多个数字
  • (?:\r?\n\S++\S++\1)+
    -换行符的一次或多次重复,后跟1+非空格、1+空格和与组1中相同的值,因为
    \1
    是对存储在该组中的值的反向引用
  • $
    -行结束
在Python中,使用
re.finditer

for m in re.finditer(r'(?m)^[A-Z]+\r?\n\S+\s+(\d+)(?:\r?\n\S+\s+\1)+$', text):
    print(m.group())

查看。

试试@WiktorStribiżew这很好。.我如何通过python中的正则表达式代码只打印选定的组?查看答案并进行解释和演示。我如何通过python中的文本文件本身传递整个文本值内容?@pavithranG使用而不是
text
@WiktorStribiżew,++ve获得不错的解决方案,你能告诉我如何学习不同语言的正则表达式吗。我想知道是你通晓所有的语言,还是你对所有的语言都练习得太多了。先生,如果您能在这里指导我,我将不胜感激。@RavinderSingh13我在这里练习过,等等。参考rexegg.com和regular-expressions.info,这里解释了很多东西。