Python:在字符串中检测负数

3

我有一些文本文件,其中有一行内容如下:

STRT .M                 -9.0:  START DEPTH

我希望您能检测负数并将其替换为0.1。我可以通过查找“-”来检测负数。
text.count('-')

如果 text.count('-') > 0,则存在负数。
我的问题是:如何将字符串中的“-9.0”替换为数字0.1?最终,我想输出:
STRT .M                  0.1:  START DEPTH

注意:负数在文件之间有所不同,不总是-9.0。 - Flux Capacitor
这是固定宽度的吗?(即,如果替换字符串的长度不如原始字符串那么长,是否会影响结果?) - Tim Yates
不,它可能是-9.0、-10.1、-11.123等,因此我需要一个通用的解决方案,将任何负十进制数替换为0.1。 - Flux Capacitor
让我澄清一下:如果我用“0.1”替换一个像“-100000”这样的数字,并且不添加任何额外的空格,那么剩下的行不在以前的位置是否重要? - Tim Yates
@Tim Yates 我不认为这会有影响,但我不能百分之百确定。 - Flux Capacitor
3个回答

6
简单的解决方案是使用.replace('-9.0','0.1')请参阅.replace()的文档),但我认为你需要基于正则表达式的更灵活的解决方案:
import re
new_string = re.sub(r'-\d+\.\d+', '0.1', your_string)

同意。我应该表述得更清楚。负数可以是任何负数。 - Flux Capacitor
1
@Flux 它也可以是整数吗? - Tadeck
好问题。我怀疑它不会是一个整数,但我不能百分之百确定,因为我还没有查看每个约200个文件。 - Flux Capacitor
@bradley.ayers 你说得对 - 我在测试之前就发布了它。现在它会用至少包含1个数字的小数部分替换每个负浮点数(不匹配例如.5)。 - Tadeck
1
正则表达式中的小数点前面不应该包含“-”吗?! - ThomasH

4

看起来你正在处理LAS文件。你可以查看libLAS,看看它是否适合你的需求。这里还有一个教程


1

正则表达式可以做到这一点:

>>> import re
>>> regex = re.compile(r' -\d+(\.\d+)?:')
>>> regex.sub(' 0.1:', 'STRT .M                 -9.0:  START DEPTH')
'STRT .M                 0.1:  START DEPTH'
>>> regex.sub(' 0.1:', 'STRT .M                 -19.01:  START DEPTH')
'STRT .M               0.1:  START DEPTH'
>>> regex.sub(' 0.1:', 'STRT .M                 -9:  START DEPTH')
'STRT .M                 0.1:  START DEPTH'

re.sub 文档


如果负数是任何负数而不仅仅是-9.0,这个代码还能正常工作吗? - Flux Capacitor
请注意,这对于例如“-10.0”甚至更小的“-9”(没有小数点)都不起作用。如果它不是固定宽度,则修复很简单,但OP尚未指定... - Tim Yates
它已经被修订,现在似乎能够做到这一点。 - joar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接