当前位置: 首页 > 知识库问答 >
问题:

字符串到目前为止的相同解析模式只工作一次,而另一次失败了?

封烈
2023-03-14

下载我的电子邮件,并想根据它们的日期对它们进行排序。其中一些是转发的,因此电子邮件日期是转发日期,而不是原始日期。

以下是转发邮件的部分内容:

确定5522八位字节返回路径:。。。id lg7sm19095682wjb。9.2014.08.01.01.02.00 ...<密码=ECDHE-RSA-RC4-SHA位=128/128)<2014年8月1日星期五01:02:00-0700(PDT)消息ID:<日期:2014年8月1日星期五10:02:04 0200发件人:
内容类型:文本/普通;字符集=UTF-8;格式=流式内容传输编码:8位
-----原始Nachricht---------<基准:2013年10月22日星期二18:18:18 0200(CEST)冯:。。。

如果我尝试捕捉原始电子邮件日期(日期:Fri,2014年8月1日10:02:04)
此匹配和解析非常有效!!

            # **real send date** of email: Date: Fri, 01 Aug 2014 10:02:04 +0200
            if ( $mail -match 'Date:\W[a-zA-Z]+\W+(\d+.+?\d{4}\W[\d:]+)\W' ) { 
                $a=[datetime]::ParseExact($Matches[1], "dd MMM yyyy HH:mm:ss", $null)
                } else { $listOfMails.Add($a.ToString("yyyy.MM.dd-HH:mm:ss"),$mail); $n--; continue }
            } else { $n--; continue }

但如果我试图匹配并解析电子邮件的原始日期,这会失败吗?

            # the original date of the email:  Datum:   Tue, 22 Oct 2013 18:18:18...
            if ( $mail -match 'Original-Nachricht.+?Datum\W*[A-Z][a-zA-Z]+\W+(\d+.+?\d{4}\W[\d:]+)\W*' ) {
                Write-Host "Date 1: >$($Matches[1])<"
                try {
                    $a=[datetime]::ParseExact($Matches[1], "dd MMM yyyy HH:mm:ss", $null) 
                } catch { $_; break }
                $listOfMails.Add($a.ToString("yyyy.MM.dd-HH:mm:ss"),$mail); $n--; continue }
            }

1) 这场比赛是正确的($true)
2)写入主机打印:日期1:

你知道是什么导致了问题,该怎么办吗<谢谢

PS:让我补充一下,这封邮件是直接从邮箱中删除的,然后被解析。。

在我的德语PC上找到了解决方案。Oct导致了问题——Okt解决了问题。

共有1个答案

訾高飞
2023-03-14

问题在于文化。从MSDN,当你调用DateTime时。精确解析:

如果提供程序为null,则使用与当前区域性对应的CultureInfo对象。

我假设您的解析失败,因为您使用的是德语CultureInfode。同样的解析也适用于en-USInvariantCulture

PS C:\> $s = "22 Oct 2013 18:18:18"
PS C:\> $f = "dd MMM yyyy HH:mm:ss"
PS C:\> [datetime]::ParseExact($s, $f, [CultureInfo]::GetCultureInfo("de-DE"))
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
At line:1 char:1
+ [datetime]::ParseExact("22 Oct 2013 18:18:18", "dd MMM yyyy HH:mm:ss", [CultureI ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException

PS C:\> [datetime]::ParseExact($s, $f, [CultureInfo]::GetCultureInfo("en-US"))

Tuesday, October 22, 2013 18:18:18

PS C:\> [datetime]::ParseExact($s, $f, [CultureInfo]::InvariantCulture)

Tuesday, October 22, 2013 18:18:18

我不懂德语,所以我上了谷歌翻译,发现德语中的“十月”拼写为“十月”。现在,下面的代码工作:

PS C:\> [datetime]::ParseExact("22 Okt 2013 18:18:18", $f, [CultureInfo]::GetCultureInfo("de-DE"))

Tuesday, October 22, 2013 18:18:18
 类似资料:
  • 我是一个很新的编程人员,我正在尝试使用Javascript制作岩石剪刀,我遇到了这个问题。每当我点击岩石图像,它会产生一个0和2之间的随机数,如果这个数字是0,那就是平局,如果是1,那玩家输了,如果是2,那玩家赢了。但当我运行这段代码时,它只在数字为0时才起作用。所以当我点击按钮时,如果数字是0,它会显示“它是一个领带”,但如果不是0,它不会显示任何东西。但当我再次尝试单击时,它不起作用。我必须刷

  • 我面临着与Java的匹配器的其他问题。我试图使用正则表达式匹配我的JSON的内容,而不使用外部库。我的JSON看起来像这样: 但是,我只想匹配上半部分中的单词,即在第一个匹配。我试图创建一个新的模式和匹配器,但我不知道如何进行,也不知道如何在第一次出现

  • 我有以下代码: 当我单击具有另一个id的元素时,它会加载一次。点击一次之后,就再也不行了。

  • 我正在做一个游戏,但是我在使用“相交”功能时遇到了一个问题。塞纳里奥看起来像这样;我做了一个游戏,玩家是一个长方形,目标是杀死敌人。敌人的“老板”矩形有两个“模拟”,模拟一个运动和一个攻击。这些模拟是由向量驱动的。移动是水平来回的,攻击是垂直的,一种冲锋式的交易。boss也有一个矩形的目标区域,如果被截断,“boss”将在屏幕上冲锋。现在问题来了,当我试图让它,如果球员与矩形目标区域相交,“老板”

  • 本文向大家介绍统计某一字符或字符串在另一个字符串中出现的次数相关面试题,主要包含被问及统计某一字符或字符串在另一个字符串中出现的次数时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我有这种形式的字符串 字符串中的所有%s都具有相同的值(即s)。有没有更好的方式编写此代码?(而不是列出三遍) 问题答案: 您可以使用Python 2.6和Python 3.x中提供的高级字符串格式: