使用正则表达式忽略带有数字的字符串中的日期

Ignore date in a string with numbers using regular expression

我有个小问题。

我用[0-9\,.]* 在字符串中查找小数点。 然后 ([^\s]+) 找到第一个数字后面的文字。

字符串通常看起来像这样。 1 个数字文本和日期:

1.023,45 stück

24.05.10

但有时我只有日期,然后我变成了十进制的 240510。 有时我只有小数点。

我应该如何修改正则表达式以找到日期(如果存在)并将其删除? 然后寻找一个小数 select 这个如果存在的话。

提前致谢。

我建议以更严格的方式匹配数字(1-3 位数字,然后是 . + 3 digits 组(如果有),以及带数字的小数点分隔符,可选)。

(?s)(?<number>\d{1,3}(?:\.\d{3})*(?:,\d+)?)\s+(.*?)(?:$|\n|(?<date>\d{2}\.?`\d{2}\.?(?:\d{4}|\d{2})))

demo

号码将保留在 ${number} 中,日期将保留在 ${date} 中。如果字符串以与日期非常相似的内容(6 或 8 位数字,带可选句点)开头,则不会被捕获。如果日期格式已知(例如,句点始终存在),请从 \.?s.

中删除 ?s

(?s)开头会强制句点.匹配一个新行(也许没有必要)。

分而治之

  1. 首先检查日期并从字符串中删除匹配项

    ([0-9]{1,2}\.){2}[0-9]{1,2}

  2. 使用原始正则表达式查找号码

    [0-9\,.]*

  3. 如果你需要它找到数量的单位(假设你只会将它作为小写字母和 u 元音变音)

    ([a-zü]+)

有关处理正则表达式的一些有用信息和工具,请参阅 http://regexe.de/ (German) and http://www.regexr.com/(英语)。