我有一个文件,我希望用正则表达式解析。到目前为止,它已经为许多不同的文件工作,但这个需要不同的东西。我有以下示例文本:
Test1 £4000 £5000
Here street
Here
UK
Test2 £2 £1000
There street
There
UK
Test3 £100 £1000
Haha street
Funnyville
Ireland
对于第一个,例如,我需要获得3件事,£4000
,£5000
和
Test1
Here street
Here
UK
我正在使用正则表达式字符串((.*)[^\x00-\x7F](.*)[^\x00-\x7F](.*)\n((.*\n){1,5}))
,它在某种程度上使其正确但只匹配Test1
和Test3
。您可以在http://regex101.com/r/tT9pR8
我正试图找到一种方法,在这部分((.*\n){1,5})
中说明该行不能包含£符号。 ([^\x00-\x7F]
)。我尝试了几种不同的方法,例如使用^[^\x00-x7F]
但没有返回任何匹配。
匹配此项的最佳方式是什么?注意:必须使用正则表达式,对于任何想知道的人。
编辑:文本实际上被不应匹配的其他文本包围。实际文本类似于下面的内容,下面使用Robin的答案将“START STRING”和“END STRING”与第一个和最后一个匹配相匹配。 “START STRING”和“END STRING”将是常量。见http://regex101.com/r/gM6vL0
START STRING
Test1 £4000 £5000
Here street
Here
UK
Test2 £2 £1000
There street
There
UK
Test3 £100 £1000
Haha street
Funnyville
Ireland
END STRING
编辑2:END STRING
实际上更像END STRING £4545 £4554
定义,因此它与罗宾的模式相匹配,如http://regex101.com/r/oC0xL2所示
此外,文件中还有其他与模式匹配的事件,而不在START STRING
和END STRING
之间,因此不应匹配/
答案 0 :(得分:1)
轻松解决方案
拆分字符串:仅保留START STRING
和END STRING
之间的部分,然后应用
/^([^£]*)(£\d+)\s(£\d+)([^£]*)(?=^.*£|$)/gm
将无限制地匹配您的模式
酷正则表达式解决方案
如果您需要在 START STRING
之后立即匹配这些模式(没有真正检查结尾是END STRING
而不仅仅是{{1}的行虽然),这应该做的伎俩
£
这会捕获/(?:START STRING|(?!\A)\G([^£]*)(£\d+)\s(£\d+)([^£]*)(?=^.*£|END STRING))/gm
,Test1
,£4000
和
£5000
在这里演示:http://regex101.com/r/gR4vM5
说明的
Here street
Here
UK