如何删除即将到来的字符?

时间:2017-10-19 13:46:24

标签: python regex

我正在尝试删除后来发生的字符。点后有6个字符。它没有改变。

输入(字符串):

52.01317215 1121.53601074 1049.63146973 1540.70495605
517.47277832 85.62935638 553.46118164 106.97449493
1.70361996 550.58435059 159.12145996 714.25854492

输出(字符串)(我想要的):

52 1121 1049 1540
517 85 553 106
1 550 159 714

任何帮助将不胜感激......

6 个答案:

答案 0 :(得分:2)

如果您的输入是多行字符串,并且您的输出应该是删除了所有小数部分的另一个多行字符串,则可以使用正则表达式:

import re
result = re.sub(r"\.\d+", "", mystring)

>>> print(result)
52 1121 1049 1540
517 85 553 106
1 550 159 714

答案 1 :(得分:2)

您可以使用下面的内容作为示例,您应该首先使用拆分以进入字符串直到for循环,然后再次使用拆分将分开。

using namespace Magick;

bool LoadTextCaption(const std::string& text,
                     const std::string& fontface,
                     int pointsize,
                     Magick::Color color)
{
    Image image;                           // Allocated but not initialized.
    image.font(fontface);
    image.fillColor(color);
    image.strokeColor(color);
    image.fontPointsize(pointsize);
    image.backgroundColor(Color("BLACK")); // <- Set background
    image.read("CAPTION:" + text);
    return true;
}
// ... 
LoadTextCaption("Hello Caption!", "TimesNewRoman", 32, Color("RED"));

您的解决方案看起来像

  

52 1121 1049 1540 517 85 553 106 1 550 159 714

答案 2 :(得分:1)

一种方法是通过正则表达式:

s = """
52.01317215 1121.53601074 1049.63146973 1540.70495605
517.47277832 85.62935638 553.46118164 106.97449493
1.70361996 550.58435059 159.12145996 714.25854492
"""
import re
final_data = map(int, re.findall("\d+(?=\.)", s))

输出:

[52, 1121, 1049, 1540, 517, 85, 553, 106, 1, 550, 159, 714]

如果您不希望最终字符串转换为整数,您可以尝试:

new_data = [b for b in [re.findall("\d+(?=\.)", i) for i in s.split("\n")] if b]

输出:

[['52', '1121', '1049', '1540'], ['517', '85', '553', '106'], ['1', '550', '159', '714']]

答案 3 :(得分:1)

s = '''52.01317215 1121.53601074 1049.63146973 1540.70495605
517.47277832 85.62935638 553.46118164 106.97449493
1.70361996 550.58435059 159.12145996 714.25854492'''

s2 = ''
use_char = True
for c in s:
    if c == '.':
        use_char = False
    elif c == ' ':
        use_char = True
    if use_char:
        s2 += c
print(s2)

结果:

52 1121 1049 1540 85 553 106 550 159 714

答案 4 :(得分:0)

你可以试试这个

str="""52.01317215 1121.53601074 1049.63146973 1540.70495605 
517.47277832 85.62935638 553.46118164 106.97449493 
1.70361996 550.58435059 159.12145996 714.25854492"""
for i in str.split():
    print '%d' % float(i)

答案 5 :(得分:0)

Python-3.9 代码

这个也可以用ListComprehension来解决

这里只是修改 Sandeep 的代码,

listOfFloats = """52.01317215 1121.53601074 1049.63146973 1540.70495605 
517.47277832 85.62935638 553.46118164 106.97449493 
1.70361996 550.58435059 159.12145996 714.25854492"""

result = [int(float(i)) for i in listOfFloats.split()]

print(result)