wolfram-mathematica – 如何将包含小数点的字母数字(参考)编号转换为Mathematica中的字符串

我有一个以下类型的参考号DAA76647.1我想在Mathematica中不变地转换为字符串.

那是

myfn [DAA76647.1]

给出输出

“DAA76647.1”

是否有捷径可寻? (输入不能是字符串,除了转换为字符串之外,我不想以任何其他方式更改输入).

更新

ToString /@ {A1234, 1234.1, A1234 .5}

给出以下输出(我只是从键盘输入了所有内容)

{"A1234", "1234.1", "0.5 A1234"}

似乎如果小数点前面的数字是字母数字,则存在问题.

可能的解决方法

根据David Carraher建议的解决方案,可能的方法如下:

ToString[# /.a_ b_ :> ToString[b] <> StringDrop[ToString[a], 1]] & /@ {A1234, 
  1234.1, A1234 .5}

作为输出:

{"A1234", "1234.1", "A1234.5"}

如果小数点后面的内容不是字母数字,并且前面提到的内容不是以零开头(例如0A123.1),这似乎可以正常工作.

如果字母数字仅在小数点之后出现,则可以合并

StringReplace[ToString[123.45 B55c], Whitespace -> ""]

但如果字母数字出现在小数点之前和之后,则仍需要将数字作为字符串输入.

大卫卡拉赫的原始建议

f[Times[a_, b_]] := ToString[b] <> ToString[a]
如果您通过Mma笔记本中的输入单元格输入DAA76647DAA76647.1,Mma会将这些字符解释为乘法.当您输入时,它甚至会自动在7和.1之间插入一个空格(至少在Mma 8中).

DAA76647DAA76647 .1 // FullForm

(*Out= Times[0.1`,DAA76647DAA76647] *)

这很有希望:

f[Times[a_, b_]] := ToString[b] <> ToString[a]

编辑:
然而,正如TomD所指出的那样(我不知何故错过了),它为解决方案增加了额外的零!

f[Times[DAA76647DAA76647 .1]]
(*Out= DAA76647DAA766470.1  *)

%//FullForm
"DAA76647DAA766470.1"

TomD后来展示了如何通过StringDropping零来处理这个问题.

如果只有小数点右侧出现数字并且左侧部分未被解释为产品,则此更正解决方案将起作用.

如果您尝试输入DAA76647.01A,Mma会将其解析为

(*Out= Times[".01",A,DAA76647]    *)

请注意,它会更改组件的顺序.

我看不到处理这种重新排序的方法.

相关文章
相关标签/搜索