アプリ版:「スタンプのみでお礼する」機能のリリースについて

2016.04.04
2016.4.4

このようなものを正規表現で
20160404
に変更することはできますか?
マクロで2段階でも可です
お願いします

A 回答 (3件)

入力を「test.txt」とした場合、



バッチスクリプト(.bat)では、
ーーーー
for /f "delims=. tokens=1-3" %%I in (test.txt) do (
SET /A Y=%%I
SET /A M=%%J+100
SET /A D=%%K+100

echo !Y!!M:~1,2!!D:~1,2!
)
ーーーー

シェルスクリプト(.sh)では
ーーーー
cat test.txt | awk -F. '{printf("%4d%2d%2d\n",$1,$2,$3)}' | tr " " 0
ーーーー

正規表現はプログラム言語毎に異なりますので、なにの言語を使うのか指定は欲しいです。
    • good
    • 0

動的な文字列置換ができる処理系ならば、


置換後に0埋めする処理を指定すれば簡単です

# Perl
my $s = '2016.04.04 and 2016.4.4';
$s =~ s/(\d+)\.(\d{1,2})\.(\d{1,2})(?!\d)/$1.sprintf("%02d",$2).sprintf("%02d",$3)/ge;

// JavaScript
var s = '2016.04.04 and 2016.4.4';
var p = x => ('0' + x).substr(-2);
var r = /(\d+)\.(\d{1,2})\.(\d{1,2})(?!\d)/g;
s = s.replace(r, (m,g1,g2,g3) => g1+p(g2)+p(g3) );

できないなら、正規表現による検索結果を逐次処理しましょう

// Java
String s = "2016.04.04 and 2016.4.4";
Matcher m = Pattern.compile("(\\d+)\\.(\\d{1,2})\\.(\\d{1,2})(?!\\d)").matcher(s);
StringBuffer b = new StringBuffer();
while (m.find()) {
_ int dy = Integer.parseInt(m.group(1),10);
_ int dm = Integer.parseInt(m.group(2),10);
_ int dd = Integer.parseInt(m.group(3),10);
_ m.appendReplacement(b, String.format("%d%02d%02d", dy, dm, dd));
}
s = m.appendTail(b).toString();
    • good
    • 0

正規表現で合致することどうとでもできますが


置換はプログラムがすることなので
どのプログラムで処理するかによります
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!