【问题标题】:Replace each instance of a character in a string with the first number of the string in Sublime Text用 Sublime Text 中字符串的第一个数字替换字符串中的每个字符实例
【发布时间】:2017-11-15 22:07:57
【问题描述】:

这可能是一个非常模糊的请求,但我有 6,000 多行看起来像这样......

#1234 - 1,9
#5678 - 7,10,23

我需要获取 #1234(用户 ID)并将其与字符串中的每个数字配对以生成新字符串,即

#1234 - 1
#1234 - 9
#5678 - 7
#5678 - 10
#5678 - 23

如何做到这一点?这些行都因字符串中有多少数字/逗号而异

【问题讨论】:

  • 你试过什么?你熟悉任何编程语言吗?
  • 我熟悉 HTML 和 PHP,我已经涉足 Regex,但没有这么复杂。我尝试了一件不起作用的正则表达式,但现在我无法追踪它。我一直在尝试与多个光标内联。我能够推断出每行有多少个数字,但我意识到我不知道如何让它变得有用。
  • regex 和 html 不是编程语言,所以我认为你最好的选择是使用 php。这里有一些资源可以帮助您入门:google.com.sg/amp/s/davidwalsh.name/…stackoverflow.com/questions/13246597/…。这个想法是逐行读取文件;对于每一行,您用连字符分解(拆分)以获取用户和数字,然后用逗号拆分数字。然后将这些值写入新文件

标签: regex sublimetext2


【解决方案1】:

如果python是一个选项,对于这个特定的情况,这段代码应该可以工作:

from re import findall

input = """#1234 - 1,9
#5678 - 7,10,23"""
regexStr = "\d+"
for line in input.split('\n'):
    matches = findall(regexStr, line)
    for i in range(1, len(matches)):
        print("#" + matches[0] + " - " + matches[i])

输出:

#1234 - 1
#1234 - 9
#5678 - 7
#5678 - 10
#5678 - 23

【讨论】:

    【解决方案2】:

    对于用户正则表达式替换,您可以重复此搜索并替换直到没有剩余:

    搜索:

    ^((#[0-9]+ - )[0-9,]+),([0-9]+)$
    

    替换为

    $1\n$2$3
    

    【讨论】:

    • 我想出了一个不同的解决方案,但感谢您的回应 NetMage 但是当我尝试它时,我得到了... #1234 - 1\n#1234 - 9 #5678 - 7,10\n #5678 - 23
    • 我应该补充一点,我运行了两次,另一个逗号没有被替换
    • 我撒谎了,因为有这么多行,它没有在一个运行得更好的在线正则表达式上工作,但我在崇高的文本中尝试过它并且它有效!你是圣人和学者,谢谢!
    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2018-12-11
    • 2017-08-06
    相关资源
    最近更新 更多