100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python提取列表中文本_Python正则表达式:从文本文件中提取关键字后的元组列表...

python提取列表中文本_Python正则表达式:从文本文件中提取关键字后的元组列表...

时间:2023-02-08 23:47:56

相关推荐

python提取列表中文本_Python正则表达式:从文本文件中提取关键字后的元组列表...

这将是查找outter结构的主要正则表达式:

\bvertices\s*\((\s*(?:\([^)]+\)\s*)+)\)

在此之前,我们将删除所有评论。

\([^)]+\)

见演示

here

.

代码:

import re

test_str = """

/*--------------------------------*- C++ -*----------------------------------*\

| ========= | |

| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |

| \\ / O peration | Version: 5 |

| \\ / A nd | Web: |

| \\/ M anipulation | |

\*---------------------------------------------------------------------------*/

FoamFile

{

version 2.0;

format ascii;

class dictionary;

object blockMeshDict;

}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 0.001;

vertices

(

(-20.6 0 -0.5)

(-20.6 25.4 -0.5) /* Some comment */

(0 -25.4 -0.5)

(0 0 -0.5)

(0 25.4 -0.5)

(206 -25.4 -0.5)

(206 0 -0.5)

(206 25.4 -0.5)

(290 -16.6 -0.5)

(290 0 -0.5)

(290 16.6 -0.5)

(-20.6 0 0.5)

(-20.6 25.4 0.5)

(0 -25.4 0.5)

(0 0 0.5)

(0 25.4 0.5)

(206 -25.4 0.5)

(206 0 0.5)

(206 25.4 0.5)

(290 -16.6 0.5)

(290 0 0.5)

(290 16.6 0.5)

/*(1 2 3 4)*/ // Commented tuple

//(1 2 3 4)

);

/* vertices commented

vertices

(

(-20.6 0 -0.5)

(-20.6 25.4 -0.5)

(0 -25.4 -0.5)

(0 0 -0.5)

(0 25.4 -0.5)

(206 -25.4 -0.5)

(206 0 -0.5)

(206 25.4 -0.5)

(290 -16.6 -0.5)

(290 0 -0.5)

(290 16.6 -0.5)

)

*/

negY

(

(2 4 1)

(1 3 0.3)

);

posY

(

(1 4 2)

(2 3 4)

(2 4 0.25)

);

posYR

(

(2 1 1)

(1 1 0.25)

);

blocks

(

hex (0 3 4 1 11 14 15 12)

(18 30 1)

simpleGrading (0.5 $posY 1)

hex (2 5 6 3 13 16 17 14)

(180 27 1)

edgeGrading (4 4 4 4 $negY 1 1 $negY 1 1 1 1)

hex (3 6 7 4 14 17 18 15)

(180 30 1)

edgeGrading (4 4 4 4 $posY $posYR $posYR $posY 1 1 1 1)

hex (5 8 9 6 16 19 20 17)

(25 27 1)

simpleGrading (2.5 1 1)

hex (6 9 10 7 17 20 21 18)

(25 30 1)

simpleGrading (2.5 $posYR 1)

);

edges

(

);

boundary

(

inlet

{

type patch;

faces

(

(0 1 12 11)

);

}

outlet

{

type patch;

faces

(

(8 9 20 19)

(9 10 21 20)

);

}

upperWall

{

type wall;

faces

(

(1 4 15 12)

(4 7 18 15)

(7 10 21 18)

);

}

lowerWall

{

type wall;

faces

(

(0 3 14 11)

(3 2 13 14)

(2 5 16 13)

(5 8 19 16)

);

}

frontAndBack

{

type empty;

faces

(

(0 3 4 1)

(2 5 6 3)

(3 6 7 4)

(5 8 9 6)

(6 9 10 7)

(11 14 15 12)

(13 16 17 14)

(14 17 18 15)

(16 19 20 17)

(17 20 21 18)

);

}

);

// ************************************************************************* //

"""

# Clean comments:

test_str = re.sub(r"//.*", '', test_str)

test_str = re.sub(r"/\*.*?\*/", '', test_str, 0, re.DOTALL)

# Match main group

matches = re.findall(r"\bvertices\s*\((\s*(?:\([^)]+\)\s*)+)\)", test_str, re.MULTILINE | re.DOTALL)

# Fetch tuples

matches2 = re.findall(r"\([^)]+\)", matches[0], re.MULTILINE | re.DOTALL)

print matches2

解释:

\b # word boundary

vertices # literal 'vertices'

\s* # 0 or more spaces (includes line feed/carriage return)

\( # literal '('

( # First capturing group

\s* # Som spaces

(?: # Group

\([^)]+\) # literal '(' + any non-')' character 1 or more times + literal ')'

\s* # extra spaces

)+ # repeated one or more times

)

\) # literal ')'

然后你抓到那群人并搜索

. 它将找到顶点的实例。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。