作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含数字的文本字符串。另外,我有一份号码 list 。我想按照字符串和列表的顺序将字符串中的数字替换为列表中的数字。
通过使用正则表达式,我从字符串中提取了现有的数字,并将它们传递到列表中,现在我在原始数字和备用数字之间有了匹配。但目前还不清楚如何找到调整并按顺序进行替换。
通过这一行,我从给定的字符串中提取数字:
list_of_numbers_in_string = [int(x) for x in re.findall('\d+', str)]
现在我想知道如何使用它,或者另一种方法来从这个输入中获得所需的结果:
data = 'readingOrder {index:24;} person {offset:0; length:7;} textStyle {offset:0; length:7; underlined:true;} place {offset:52; length:8;} textStyle {offset:52; length:8; underlined:true;}'
new_numbers = [24, 0, 12, 0, 12, 58, 14, 58, 14]
得到这个输出:
corrected_data = 'readingOrder {index:24;} person {offset:0; length:12;} textStyle {offset:0; length:12; underlined:true;} place {offset:58; length:14;} textStyle {offset:58; length:14; underlined:true;}'
最佳答案
接受的答案实际上是不正确的(现已删除)。 data.replace()
将替换第一次出现的数字,该数字并不总是正确的。例如,当您尝试将 8 替换为 14 时,它实际上将 58 替换为 514。
这是我的解决方案:
import re
data = 'readingOrder {index:24;} person {offset:0; length:7;} textStyle {offset:0; length:7; underlined:true;} place {offset:52; length:8;} textStyle {offset:52; length:8; underlined:true;}'
new_numbers = [24, 0, 12, 0, 12, 58, 14, 58, 14]
offset = 0
for index, match in enumerate(re.finditer('\d+', data)):
data = data[:match.start() + offset] + str(new_numbers[index]) + data[match.end() + offset:]
offset += len(str(new_numbers[index])) - match.end() + match.start()
关于python - 如何用另一个列表中的数字替换字符串中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58470775/
我是一名优秀的程序员,十分优秀!