正则表达式:替换捕获组中的字符
regex: substitute character in captured group
编辑
在正则表达式中,匹配的捕获组是否可以替换为相同的匹配 altered 将一个字符替换为另一个字符?
原始问题
我正在将产品列表转换为 CSV 文本文件。列表中的每一行都有:number name[ description] price
,格式为:
1 PRODUCT description:120
2 PRODUCT NAME TWO second description, maybe:80
3 THIRD PROD:18
生成的格式还必须包含一个 slug(使用 -
而不是
)作为第二个字段:
1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product-name-two-2:second description, maybe:80
3 THIRD PROD:third-prod-3::18
我使用的正则表达式是这样的:
(\d+) ([A-Z ]+?)[ ]?([a-z ,]*):([\d]+)
替换字符串为:
` :\L-::
这样我的结果是:
1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product name two-2:second description, maybe:80
3 THIRD PROD:third prod-3::18
我想念的是我在第二个字段中需要的分隔符连字符 -
,即
组,使用 '-
' 而不是 '
'.
是否可以使用单个正则表达式,或者我应该进行第二遍?
(目前我使用的是 Sublime 文本编辑器)
谢谢。
我不认为一次性完成这个是合理的,甚至可能是不可能的。要用连字符替换空格,您将需要多次传递或使用连续匹配,两者都会丢失您需要重新排列结构的捕获组的上下文。因此,在您第一次替换后,我会搜索 (?m)(?:^[^:\n]*:|\G(?!^))[^: \n]*\K
并替换为 -
。我不确定 Sublime 是否默认使用多行修饰符,你可以删除 (?m)
然后。
答案可能不同,如果你使用一种编程语言,支持正则表达式替换操作的回调函数,你可以在其中执行 </code> 到 <code>-
在此函数内替换。
编辑
在正则表达式中,匹配的捕获组是否可以替换为相同的匹配 altered 将一个字符替换为另一个字符?
原始问题
我正在将产品列表转换为 CSV 文本文件。列表中的每一行都有:number name[ description] price
,格式为:
1 PRODUCT description:120
2 PRODUCT NAME TWO second description, maybe:80
3 THIRD PROD:18
生成的格式还必须包含一个 slug(使用 -
而不是 )作为第二个字段:
1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product-name-two-2:second description, maybe:80
3 THIRD PROD:third-prod-3::18
我使用的正则表达式是这样的:
(\d+) ([A-Z ]+?)[ ]?([a-z ,]*):([\d]+)
替换字符串为:
` :\L-::
这样我的结果是:
1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product name two-2:second description, maybe:80
3 THIRD PROD:third prod-3::18
我想念的是我在第二个字段中需要的分隔符连字符 -
,即 组,使用 '
-
' 而不是 ''.
是否可以使用单个正则表达式,或者我应该进行第二遍?
(目前我使用的是 Sublime 文本编辑器)
谢谢。
我不认为一次性完成这个是合理的,甚至可能是不可能的。要用连字符替换空格,您将需要多次传递或使用连续匹配,两者都会丢失您需要重新排列结构的捕获组的上下文。因此,在您第一次替换后,我会搜索 (?m)(?:^[^:\n]*:|\G(?!^))[^: \n]*\K
并替换为 -
。我不确定 Sublime 是否默认使用多行修饰符,你可以删除 (?m)
然后。
答案可能不同,如果你使用一种编程语言,支持正则表达式替换操作的回调函数,你可以在其中执行 </code> 到 <code>-
在此函数内替换。