我可以使用正则表达式来帮助格式化这些数据以分隔姓名、年龄和地址吗?



我正在为班级做作业,我们需要格式化这些数据。我认为正则表达式将是格式化数据的一种非常优雅的方式。但是,我遇到了一些麻烦。这是我第一次这样做,我不知道如何正确分割数据。我希望第一个数字的开头是第一部分,直到下一个空格的第一个数字是第二部分,直到行尾的是第三部分。以下是我的数据:

Amber-Rose Bowen 53    123 Machinery Rd.
Joyce Kirkland 19 234 Cylinder Dr.
Seb Dotson 32 3456 Surgery Ln. 
Dominique Hough 58 654 Election Rd.
Yasemin Mcleod 29 555 Cabinet Ave.
Nancy Lord 80       232 Highway Rd.
Tracy Mckenzie 72 101 Device Ave.
Alistair Salter 25 109 Guitar Ln.
Adeel Sears 42 222 Solitare Rd.

我一直在使用https://regex101.com/来测试我的想法。([a-zA-Z]+)([0-9]+)这是我的开始,但我不知道如何从开始到第一个数字。(或任何其他部分)

可以使用

^(.*?)[^Srn]+(d+)[^Srn]+(S.*)

参见regex演示。这个正则表达式也可以与多行标志一起使用,从多行字符串中提取数据。

细节:

  • ^-字符串
  • 起始
  • (.*?)-组1:除换行符外,任何零或多个字符尽可能少
  • [^Srn]+-零个或多个水平空白(在某些正则表达式中,您可以使用h+[^p{Zs}t]+代替)
  • (d+)-组2:一个或多个数字
  • [^Srn]+-一个或多个水平空白
  • (S.*)-第3组:一个非空白字符,然后是其余的行。

如果您只是希望将字符串分成全名、年龄和街道地址,您可以根据正则表达式

的匹配对字符串进行拆分。
(?i)(?<=[a-z]|d) +(?=d)

例如:

Amber-Rose Bowen 53    123 Machinery Rd.
^  ^^^^

演示正则表达式的内容为:"匹配一个或多个以字母或数字开头,后面跟着数字"的空格。(?i)使字母匹配不区分大小写。(?<=[a-z]|d)正面的向后看;(?=d)是一个正面的前瞻性


如果希望提取名字、姓氏、年龄、街道号码和街道名称,可以使用以下正则表达式。

^(?<first_name>S+) +(?<last_name>S+) +(?<age>d+) +(?<street_nbr>d+) +(?<stret_name>.*)

例如:

Amber-Rose Bowen 53    123 Machinery Rd.
^^^^^^^^^^ ^^^^^ ^^    ^^^ ^^^^^^^^^^^^^
1       2   3      4       5
1: first_name
2: last_name
3: age
4: street_nbr
5: street_name

演示我对命名的捕获组使用了PCRE正则表达式引擎。表达式与其他正则表达式引擎类似,尽管有些不支持命名组,在这种情况下,您必须使用编号组(组1、组2等等)。

注意,这只在数据结构一致的情况下才有效。在现实生活中,有些字符串可能包含中间名或公寓号码等内容,这会使字符串的解析变得复杂。

相关内容

  • 没有找到相关文章

最新更新