Java 正则表达式:区分边界匹配和否定
我正在学习regex,我编写了一个从字符串中获取数字的方法:Java 正则表达式:区分边界匹配和否定,java,regex,Java,Regex,我正在学习regex,我编写了一个从字符串中获取数字的方法: replaceAll("[^\\d]",""); 上面的方法返回一个只有数字的字符串。 但我只得到一个正数。。。如果我想得到一个负数呢 所以,我试图改变模式,只考虑数字和字符“-”(仅在开始)。详情如下: replaceAll("[^\\d&&[^[^-]]",""); replaceAll("[^\\d]&&^[^-]",""); 还有其他几个。。。但是我没有得到我想要的结果。也许这是一个愚蠢的
replaceAll("[^\\d]","");
上面的方法返回一个只有数字的字符串。
但我只得到一个正数。。。如果我想得到一个负数呢
<>所以,我试图改变模式,只考虑数字和字符“-”(仅在开始)。详情如下:
replaceAll("[^\\d&&[^[^-]]","");
replaceAll("[^\\d]&&^[^-]","");
还有其他几个。。。但是我没有得到我想要的结果。也许这是一个愚蠢的错误,因为我不明白
那么,编写只在开头排除数字和“-”字符的正则表达式的正确方法是什么呢
示例:如果我输入:
$/65*(85gg78, I get 658578.
2-340, I get 2340, And:
-2-340, I get -2340
谢谢 分两步进行,首先删除非数字,但留下减号,然后删除所有减号,除非它是第一个字符
String parsed = input.replaceAll("[^\\d-]","").replaceAll("(?<!^)-", "");
String parsed=input.replaceAll(“[^\\d-]”,“”)。replaceAll((?分两步执行,首先删除非数字,但保留减号,然后删除所有减号,除非它是第一个字符
String parsed = input.replaceAll("[^\\d-]","").replaceAll("(?<!^)-", "");
String parsed=input.replaceAll(“[^\\d-]”,“”)。replaceAll((?Try
基于以下输入文本:
$/65*(85gg78,
2-340,
-2-340,
正则表达式将匹配
65
85
78
2
-340
-2
-340
试一试
基于以下输入文本:
$/65*(85gg78,
2-340,
-2-340,
正则表达式将匹配
65
85
78
2
-340
-2
-340
&&
在正则表达式中没有意义。我仍然不确定您想要做什么。请包含一个“before and after”示例。例如,当--28xxx8
中的第一个字符是[^…]
中的第一个字符时,[…]
中的其他地方是一个普通字符,而之外的行开始时,会发生什么[…]
@amadan&&
是字符类的交叉点operator@Amadan我只是编辑了一些examples@Bohemian:TIL…显然只有Java和Ruby?很高兴知道。@Bohemian:在和中工作,但在或中不工作。另外,还说“Java和Ruby 1.9及更高版本支持字符类交集。”&&
在正则表达式中没有意义。我仍然不确定您想要做什么。请包含一个“before and after”示例。例如,当--28xxx8
中的第一个字符是[^…]
中的第一个字符时,[…]
中的其他地方是一个普通字符,而之外的行开始时,会发生什么[…]
@amadan&&
是字符类的交叉点operator@Amadan我只是编辑了一些examples@Bohemian:TIL…显然只有Java和Ruby?很高兴知道。@Bohemian:在和中工作,但在或中不工作。另外,还说“Java和Ruby 1.9及更高版本支持字符类交集。”谢谢您的回答!但只有在开头有负号“-”并加上一个数字时,它才能正常工作,但在-2-3这样的情况下,我得到-2-3。如果您在开头指示只允许“-”,它将是(?!^-\\d)\\D
@tdm是的,我假设那里最多有一个减号-这是您正在处理的一些非常混乱的输入。您希望为输入返回什么“-2-3”
-“-23”
?@tdm您的解决方案将“foo-2-3”
转换为“23”
。如果这不是您想要的,请参阅我编辑的答案,了解如何使其也起作用。@tdmsoares Yes(?使用一种环视机制。更准确地说,它使用负环视机制。它只是确保我们匹配的-
前面不会有(?字符串的开头(由^
表示)。有关环顾四周和第二部分的更多信息谢谢您的回答!但只有在开头有负号“-”和一个数字的情况下,它才能正常工作,但在-2-3这样的情况下,我得到-2-3。如果您在开头指示只允许“-”,则它将是(?!^-\\d)\\D
@tdm是的,我假设那里最多有一个减号-这是您正在处理的一些非常混乱的输入。您希望为输入返回什么“-2-3”
-“-23”
?@tdm您的解决方案将“foo-2-3”
转换为“23”
。如果这不是您想要的,请参阅我编辑的答案,了解如何使其也起作用。@tdmsoares Yes(?使用一种环视机制。更准确地说,它使用负环视机制。它只是确保我们匹配的-
前面不会有(?字符串的开头(由^
表示)。有关查找和第二部分的更多信息我同意匹配比替换更好,但这并不是那么简单;在Java中,matches()
要求正则表达式匹配整个字符串。为此,您需要find()命令
方法,该方法只能在Matcher
类中找到。@Alanmore,我同意。我只是在提示OP如何使用简单的正则表达式。但我将更新代码以备复制/粘贴:)我同意匹配比替换更好,但这并不是那么简单;在Java中,matches()
希望正则表达式匹配整个字符串。为此,您需要find()
方法,该方法只能在Matcher
类中找到。@Alanmore,我同意。我只是给OP一个如何使用简单正则表达式的提示。但我会更新代码,以便复制/粘贴:)