正则表达式以获取关键字,所有数字和句点

时间:2019-03-18 18:58:53

标签: python regex

我的输入文本如下:

  

放入了3个扩展器,但是到了4楼,它们发出的信号不会互相背负,所以很弱。 ST -99。 5G DL 624.26 UP 168.20 4g DL 2   上.44

我很难编写一个与4G / 5G / 4g / 5g的任何实例都匹配的正则表达式,并在这些代码的实例后给我所有相应的测量值,这些数字是带小数的数字。

输出应为:

  

5G 624.26 168.20 4g 2 .44

任何想法如何实现?我正在尝试在Python中进行此分析。

3 个答案:

答案 0 :(得分:1)

我会像这样将其分为不同的捕获组:

(?i)(?P<g1>5?4?G)\sDL\s(?P<g2>[^\s]*)\sUP\s(?P<g3>[^\s]*)

(?i)使整个正则表达式不区分大小写

(?P<g1>5?4?G)是第一个匹配4g,5g,4G或5G的组。

(?P<g2>[^\s]*)是匹配所有非空格的第二组和第三组。

然后在Python中可以做到:

match = re.match('(?i)(?P<g1>5?4?G)\sDL\s(?P<g2>[^\s]*)\sUP\s(?P<g3>[^\s]*)', input)

并像这样访问每个组:

match.group('g1')

答案 1 :(得分:1)

我同意使用捕获组的答案,但是对正则表达式本身使用的方法略有不同。请务必使用gi(全局且不区分大小写)选项来获得正确的结果。

pool_maxsize

我包含了指向我使用的online regex tester and debugger的链接,因为它很好地解释了正则表达式的各个元素,并且我还复制了下面生成的示例python代码。

r"([45]G).*?([\d.]+).*?([\d.]+)"

答案 2 :(得分:0)

(5G|4G)\sDL\s(\d*[.]?\d*)\sUP\s(\d*[.]?\d*)
具有gi标志(全局,不区分大小写)的

应该起作用。您可以修改数字匹配,因为我不确定它是否一定是小数。