Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 忽略正则表达式中匹配字符串之间的新行_Python_Regex_Regex Negation_Regex Group_Regex Greedy - Fatal编程技术网

Python 忽略正则表达式中匹配字符串之间的新行

Python 忽略正则表达式中匹配字符串之间的新行,python,regex,regex-negation,regex-group,regex-greedy,Python,Regex,Regex Negation,Regex Group,Regex Greedy,我正试着用下面的文字跟随正则表达式 正则表达式: (\d+[\s\,\d.]*\s*(carpet|sft|feet|sqft|yard|gaj|feet|s.ft|sq.ft|sq feet|fq.ft.|sq.ft. |pt|crpt|ft|sq.mt.|sq.mtr|sq.mt|plot|sf|sfqt|acer|gj|vigha|anna|gunta|sq| gunthe|guntha|bigha|sqd|sqm|sqyd|area|acre|square|yrd| sq.yard|sq

我正试着用下面的文字跟随正则表达式

正则表达式:

(\d+[\s\,\d.]*\s*(carpet|sft|feet|sqft|yard|gaj|feet|s.ft|sq.ft|sq feet|fq.ft.|sq.ft.
|pt|crpt|ft|sq.mt.|sq.mtr|sq.mt|plot|sf|sfqt|acer|gj|vigha|anna|gunta|sq|
gunthe|guntha|bigha|sqd|sqm|sqyd|area|acre|square|yrd|
sq.yard|sq yd|sq.yd|sq. yd.|gaj|sqt)s?)
输入文本:

kanakiya area 1350     sqft asking price : 95 lacs destination properties azymn - 9920902674 
 plot on rent near sp ring road rajpath club ki gali me road touch 5000 war na 350000 rent owner side no b
它正确匹配所有必需的字符串,但也匹配
9920902674
绘图

我不想在文本中用新行分隔的匹配词

你可以更好地理解。 如何在匹配项之间不包含新行。要匹配单词之间有空格的单词

谢谢

PS:我把这个问题从以前的问题改成了现在的问题,因为这个问题没有得到很好的回答,我的账户也被关闭了。因此,尝试改进问题以解锁帐户


请忽略前面的答案和注释。

您使用的是与任何类型的垂直和水平空白相匹配的
\s
。如果您计划只匹配空格和制表符,请将其替换为
[\t]

此外,你应该考虑你的模式中的逸出点(它们都在字符类之外)以匹配字面点,否则,它们与任何字符匹配,但与行断线符匹配。

另外,您不需要在整个模式中使用捕获组,您可以始终通过组0获得整个匹配(您可以在迭代返回的所有匹配数据对象时访问该组)

因此,您可以使用

\d[\d \t,.]*(?:carpet|sft|feet|sqft|yard|gaj|feet|s\.ft|sq\.ft|sq feet|fq\.ft\.|sq\.ft\.|pt|crpt|ft|sq\.mt\.|sq\.mtr|sq\.mt|plot|sf|sfqt|acer|gj|vigha|anna|gunta|sq|gunthe|guntha|bigha|sqd|sqm|sqyd|area|acre|square|yrd|sq\.yard|sq yd|sq\.yd|sq\. yd\.|gaj|sqt)s?

您可以使用
re.findall(pattern,s)
以列表的形式获取所有匹配项。或者,如果需要包含特定子匹配的元组列表,请使用括号将这些部分括起来。例如,使用
(\d(?[\d,.]*\d)?)[\t]将数字捕捉到一组中,并将测量单位捕捉到另一组中*((二:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::124;平方米|平方米|平方码|面积|英亩|平方|年|平方码|平方码|平方米|平方码| |平方码| | | | | | | | | | | | | | | | | | | | | | | | |平方码|注一*
以确保未捕获数字后的空格

:

输出:

['1350     sqft']
Now, with captures:
1350 => sqft

我建议将正则表达式拆分为两个选项,
\s*()|()()\s*
。类似于。请参阅。尝试您可能不需要正则表达式。这里有一个更好的方法:(1)使用所有货币类型创建dict(2)拆分输入文本并查看货币类型的左侧。根据您真正想要的内容,您可以使用
(rent | rs)?([\s.]*\d+[\s\d.]*)(pkg | k)|(?:la(?:c | kh)| crore | cr)s | l)
也可以。请看这里的现场演示,谢谢大家。效果非常好。
['1350     sqft']
Now, with captures:
1350 => sqft