我用逗号分隔标记, 我需要将它们转换为以空格分隔的冒号中的标记。 我想在记事本++中使用正则表达式,但遇到了问题。
我的意见是:
aaaaa, bbb ,cccc, hhhh, fff,t
我想得到结果:
aaaaa bbb cccc hhhh fff t
每个令牌只有10个字符
我的问题是如何使输出正好10个字符?
答案 0 :(得分:8)
我认为这是一个两步过程。第一步用10个空格替换所有逗号。第二步捕获10个字符和所有尾随空格,并仅用10个捕获的字符替换。
,\s*|\s*$
替换为: __________
这些是unbars,但您应该使用十个或更多空格。
现场演示: https://regex101.com/r/mR1eS9/1
示例文字
aaaaa, bbb ,cccc, hhhh, fff,t
替换后
aaaaa bbb cccc hhhh fff t
123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789
注意:我在这里插入数字行以帮助说明字符的数量和位置
(.{10})[^\S\n\r]*
替换为: $1
现场演示: https://regex101.com/r/uL8oO7/2
示例文字
因为这是第二步,所以示例文本是上面第一步的输出
aaaaa bbb cccc hhhh fff t
替换后
aaaaa bbb cccc hhhh fff t
123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789
注意:我在这里插入数字行以帮助说明字符的数量和位置
答案 1 :(得分:6)
正则表达式计算模型非常简单,无法计算。但是,在您只有九个可能的非空匹配的情况下,您可以运行九个单独的全局替换以涵盖所有可能性(为了清楚起见,使用下划线_
代替空格):
Search Replacement
------------- -----------
(?<=\b\S{9}),\s _
(?<=\b\S{8}),\s __
(?<=\b\S{7}),\s ___
(?<=\b\S{6}),\s ____
...
(?<=\b\S{1}),\s _________
每个替换操作都匹配x
个非空格字符后面的逗号空格对,并用10-x
个空格替换它们。
答案 2 :(得分:2)
使用编程语言的解决方案可能更适合阅读和理解
查找以下PHP
和Python
的代码示例(也可以轻松采用其他语言):
<?php
$string = "aaaaa, bbb ,cccc, hhhh, fff,t";
$regex = '~(\w+)(\s*,|$)~';
# look for word characters, followed by spaces (or not)
# and a comma or the end of the string
$string = preg_replace_callback(
$regex,
function($match) {
return str_pad($match[1], 10);
},
$string);
echo $string;
# aaaaa bbb cccc hhhh fff t
?>
<小时/>
import re
string = "aaaaa, bbb ,cccc, hhhh, fff,t";
def repl(match):
return match.group(1).ljust(10)
rx = r'(\w+)(\s*,|$)'
string = re.sub(rx, repl, string)
print string