Regex 使用正则表达式提取部分文本

Regex 使用正则表达式提取部分文本,regex,extract,lookbehind,Regex,Extract,Lookbehind,我想使用正则表达式提取文本的一部分。例如,我有一个地址,只想返回号码和街道,不包括其他: 2222 Main at King Edward Vancouver BC CA 但是大多数时候,地址的格式是不同的。我尝试使用Lookbehind正则表达式,得出了以下表达式: .*?(?=\w* \w* \w{2}$) 上面的表达式很好地处理了上面的例子,但是当逗号进入文本时,它变得太乱了,邮政编码可以是一个6字符字符串,或者两个中间有3个字符的字符串,等等… 除了lookbehind正则表达式之外

我想使用正则表达式提取文本的一部分。例如,我有一个地址,只想返回号码和街道,不包括其他:

2222 Main at King Edward Vancouver BC CA
但是大多数时候,地址的格式是不同的。我尝试使用Lookbehind正则表达式,得出了以下表达式:

.*?(?=\w* \w* \w{2}$)

上面的表达式很好地处理了上面的例子,但是当逗号进入文本时,它变得太乱了,邮政编码可以是一个6字符字符串,或者两个中间有3个字符的字符串,等等…

除了lookbehind正则表达式之外,还有其他更优雅的方法提取文本的一部分吗

我们非常感谢您向另一个方向提出的任何建议或观点


谢谢

正则表达式适用于遵循某种模式的正则数据。所以,如果你的数据是完全随机的,没有,没有优雅的方法可以用正则表达式做到这一点

另一方面,如果你知道你想要什么值,你可以写几个简单的正则表达式,然后在每个字符串上测试它们

前。 regex1=地址#抓取器,regex2=街道类型抓取器,regex3=名称抓取器


尝试在string1上匹配regex1、regex2,最后是regex3。转到下一个字符串

正则表达式适用于遵循某种模式的正则数据。所以,如果你的数据是完全随机的,没有,没有优雅的方法可以用正则表达式做到这一点

另一方面,如果你知道你想要什么值,你可以写几个简单的正则表达式,然后在每个字符串上测试它们

前。 regex1=地址#抓取器,regex2=街道类型抓取器,regex3=名称抓取器


尝试在string1上匹配regex1、regex2,最后是regex3。转到下一个字符串

我想我应该把帽子扔进拳击场:

*(?=,?([a-zA-Z]+,?\s){3}([\d-]*\s)?)

您可能希望前面有
^
\d+
,以便更好地测量
我也没有费心指定邮政编码的长度。。。在这一行中任意数量的字符连字符

到目前为止,它适用于城市/州/国家区域内COMA的这些输入和变化:

  • 公元前2222年,加利福尼亚州爱德华国王温哥华市,333-333
  • 555 road and street place加利福尼亚州95000美元
  • 公元前333年爱德华国王温哥华大街2222号
  • 美国加州路和街广场555号
城市、州和国家的结尾有三个词,但除此之外,就像Ryanstack所说的,如果是随机的,就不会起作用。如果这个城市像纽约一样是两个字,那它就行不通了。是 啊regex不是这个工具


顺便说一句:在regexhero.net上测试

我想我会把帽子扔进拳击场:

*(?=,?([a-zA-Z]+,?\s){3}([\d-]*\s)?)

您可能希望前面有
^
\d+
,以便更好地测量
我也没有费心指定邮政编码的长度。。。在这一行中任意数量的字符连字符

到目前为止,它适用于城市/州/国家区域内COMA的这些输入和变化:

  • 公元前2222年,加利福尼亚州爱德华国王温哥华市,333-333
  • 555 road and street place加利福尼亚州95000美元
  • 公元前333年爱德华国王温哥华大街2222号
  • 美国加州路和街广场555号
城市、州和国家的结尾有三个词,但除此之外,就像Ryanstack所说的,如果是随机的,就不会起作用。如果这个城市像纽约一样是两个字,那它就行不通了。是 啊regex不是这个工具


顺便说一句:在regexhero.net上进行测试

我可以想出两种方法

1) 如果您知道地址后面的“剩余”数据正好是两个字段,即BC和CA,您可以使用空格作为分隔符对字符串进行拆分,删除最后两项


2) 对分隔符/[a-Z][a-Z]/进行拆分,并将结果存储在数组中。然后打印出数组(前提是地址不包含2个或更多大写字母)

我可以想出两种方法

1) 如果您知道地址后面的“剩余”数据正好是两个字段,即BC和CA,您可以使用空格作为分隔符对字符串进行拆分,删除最后两项


2) 对分隔符/[a-Z][a-Z]/进行拆分,并将结果存储在数组中。然后打印出数组(前提是地址不包含2个或更多大写字母)

FYI,这是您正在使用的前瞻,而不是落后。FYI,这是您正在使用的前瞻,而不是落后。谢谢Victor!我会尝试用更多的数据来测试它。有人可以发布JSFIDLE吗?谢谢Victor!我会尝试用更多的数据来测试它。有人能发布一个JSFIDLE吗?我就是这么想的。哦,好吧,我想我得去收拾残局了。谢谢你,瑞安!我就是这么想的。哦,好吧,我想我得去收拾残局了。谢谢你,瑞安!谢谢你的意见。谢谢你!谢谢你的意见。谢谢你!