我的输入文本如下:
放入了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中进行此分析。
答案 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标志(全局,不区分大小写)的应该起作用。您可以修改数字匹配,因为我不确定它是否一定是小数。