将文本字符串转换为持续时间你好,
我在将字符串转换为时间段(持续时间)时遇到问题。
问题之一是字符串中的空格:“天”和“小时”+ 数字之间没有空格。 分钟+数字之间有一个空格。
我尝试使用替代词来进一步推进,但是当没有空格时这似乎不起作用。
我也尝试过使用“文本到列”,但这对我也不起作用。
朱莉
回复:将文本字符串转换为持续时间天、小时、分钟……也许,也许不是。 如果您确信数据源模式不会改变,您可以走捷径。 如果数据的源模式可能发生变化,可能会添加空格,\s* 将在未来允许可选的空格。
这些例子都不太可能处理增加数周的未来来源;他们可能会默默地忽略它。 如果您强制模式从头到尾匹配,使用 ^ 和 $,如果将来出现意外(数周),您可能会得到缺失值。
Mark 的方法更容易修改以处理数周。 我的方法会更容易添加 ^ 和 $ 来测试意外情况。
我没有运行 Mark 的示例,但我认为您认为不需要 \D 可能是对的。
编辑:在 Mark 的公式中有三个独立的正则表达式匹配,它们依赖于数字后面的单词来获得正确的数字。 在我的公式中,必须跳过常量文本(天、小时、分钟)。 使用实际的单词可以使公式更容易理解。
回复:将文本字符串转换为持续时间谢谢 - 奏效了。 但是,为了更好地理解这一点:是否有必要在公式中包含“天、小时、分钟”?
另外,为什么需要“\D+”而不仅仅是“\d+”?
回复:将文本字符串转换为持续时间和一个轻微的变化
New Table( "Rec_time",
Add Rows( 8 ),
New Column( "Recording time",
Character,
"Nominal",
Set Values(
{"9days21hours54minutes", " 6 days 21 hours 29 minutes",
"2days 21 hours 24 minutes", "13days 20hours04minutes",
" 9 days 21hours 54 minutes", "9days 21hours 54 minutes",
"9days 21hours 54 minutes", "6days 20hours 39 minutes"}
),
Set Display Width( 240 )
),
New Column( "data",
Numeric,
"Nominal",
Format( ":day:hr:m", 14 ),
Input Format( ":day:hr:m" ),
Formula(
Informat(
Regex(
:Recording time,
"(\d+)\s*days\s*(\d+)\s*hours\s*(\d+)\s*minutes",
":\1:\2:\3"
),
":day:hr:m"
)
)
)
)回复:将文本字符串转换为持续时间这个案子还算不错。 我使用了 Regex() 函数。 这是列公式:
Num( Regex( :Recording time, "(\d+)day", "\1" ) ) * In Days( 1 )
+Num( Regex( :Recording time, "\D+(\d+)hour", "\1" ) ) * In Hours( 1 )
+Num( Regex( :Recording time, "\D+(\d+) minute", "\1" ) ) * In Minutes( 1 )
我对数字数据应用了一种 Duration 格式来得到这个结果:

我附上修改后的数据表供您查看。