正则表达式在数字之间搜索随机文本

时间:2014-12-03 10:52:49

标签: regex

我正在寻找正则表达式。

我有一个随机文本,在文本中有几个长度为9的数字。

示例:

Test1: "no results!"<br>
Test2: 123456789 Problems with ...<br>
Problem xyz -567891234 Problems with ...<br>
Test4: 987654321 kjdfk sakjsahfkldjasf kj 

我想提取出有这样结果的数字:

123456789, 567891234, 987654321

我可以用正则表达式找到数字:

\d{9}

我的想法是搜索随机字符,直到找到一个数字,然后用“,”替换它。但我不能为它正常表达。这是我的尝试:

.*(\d{9}) and then replace with $1 , 

但这不起作用。请有人帮帮我吗?

2 个答案:

答案 0 :(得分:0)

更好的想法是使用您的编程语言的字符串连接方法。例如,在Python中:

>>> s = """Test1: "no results!"
... Test2: 123456789 Problems with ...
... Problem xyz -567891234 Problems with ...
... Test4: 987654321 kjdfk sakjsahfkldjasf kj"""
>>> ", ".join(re.findall(r"\d{9}", s))
'123456789, 567891234, 987654321'

如果你想只使用正则表达式获得相同的结果,你需要分两步完成,这两个步骤都不重要:

>>> temp = re.sub(r"(?s)^.*?(?=\d{9})|(?<=\d{9})(?:(?!\d{9}).)*$", "", s)
>>> temp
'123456789 Problems with ...\nProblem xyz -567891234 Problems with ...\nTest4: 9
87654321'
>>> re.sub(r"(?s)(?!$)(?<=\d{9})(?:(?!\d{9}).)*", ", ", temp)
'123456789, 567891234, 987654321'

答案 1 :(得分:0)

^.*?(\d{9}).*$

您可以使用re.sub尝试此操作。请参阅演示。

http://regex101.com/r/yR3mM3/34

import re
ll=[]
p = re.compile(r'^(?:.*?(\d{9}))+.*$', re.Multiline)
subst = "\1"
for line in test_data: 
    ll.append(re.sub(p, subst, line))