正则表达式是否可以识别列是字符串还是整数?



我的目标是将字符串分成几组。问题是当前的正则表达式无法正确识别该部分。

正则表达式:

^(?: {2,})?(?P<TANGGAL>[0-9]{2}/[0-9]{2}){0,1}(?: {2,})?(?P<KETERANGAN1>[w-/:]+(?: [w-/:]+)*){0,1}(?: {2,})?(?P<KETERANGAN2>[w-/:]+(?: [w-/:]+)*){0,1}(?: {2})?(?P<SALDO>[d,.]+){0,1}

字符串:

01/07          SALDO AWAL                                                                                                                       1,000.00

问题: 正则表达式捕获:

  1. 字符串1,000.001为组KETERANGAN2而不是组SALDO
  2. ,000.00为组SALDO,而不是捕获整个1,000.00

您可以将可选的捕获组更改为必需的,并将它们移动到与列分隔符匹配的可选非捕获组中:

^(?: {2,}(?P<TANGGAL>[0-9]{2}/[0-9]{2}))?(?: {2,}(?P<KETERANGAN1>[w/:-]+(?: [w/:-]+)*))?(?: {2,}(?P<KETERANGAN2>[w/:-]+(?: [w/:-]+)*))?(?: {2,}(?P<SALDO>[d,.]+))?$

请参阅正则表达式演示。

注意添加的$字符串锚点的末尾,有必要确保整行匹配。

详情

  • ^- 字符串的开头
  • (?: {2,}(?P<TANGGAL>[0-9]{2}/[0-9]{2}))?- 一个可选的非捕获组,匹配两个或多个空格,然后捕获到组"TANGGAL"两位数,/,两位数
  • (?: {2,}(?P<KETERANGAN1>[w/:-]+(?: [w/:-]+)*))?- 一个可选的非捕获组,匹配两个或多个空格,然后捕获到组"KETERANGAN1"一个或多个单词、/:-字符,然后是空格的零个或多个序列,然后是一个或多个单词、/:-字符
  • (?: {2,}(?P<KETERANGAN2>[w/:-]+(?: [w/:-]+)*))?- 一个可选的非捕获组,匹配两个或多个空格,然后将一个或多个单词、/:-字符捕获到组"KETERANGAN2"中,然后捕获一个或多个空格序列,然后捕获一个或多个单词、/:-字符
  • (?: {2,}(?P<SALDO>[d,.]+))?- 匹配两个或多个空格的可选非捕获组,然后将一个或多个数字、,.字符捕获到组"SALDO"中
  • $- 字符串的结尾。

最新更新