有没有办法编写一个只能在一个日期时间字符串中验证一种分隔符的正则表达式?
例如,30/04/2010是正确的但是30-04/2010是不正确的.
我用Google搜索并发现了一些关于回溯的内容,但我不太确定如何使用它.例如,如果我有这个正则表达式:
(?P<date>((31(?![\.\-\/\—\ \,\–\-]{1,2}(Feb(ruary)?|Apr(il)?|June?|(Sep(?=\b|t)t?|Nov)(ember)?)))|((30|29)(?![\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?))|(29(?=[\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?[\.\-\/\—\ \,\–\-]{1,2}(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\d|2[0-8])[\.\-\/\—\ \,\–\-]{1,2}(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\b|t)t?|Nov|Dec)(ember)?)[\.\-\/\—\ \,\–\-]{1,2}((1[6-9]|[2-9]\d)\d{2}))
那我该如何在这里使用回溯?
非常感谢你.
我有一个字符串如下:
{a{b,c}d}
Run Code Online (Sandbox Code Playgroud)
如果我给1,则字符串必须显示为:
{a d}
Run Code Online (Sandbox Code Playgroud)
内括号内的内容应与大括号一起移除.
任何人都可以帮助我吗?
lines = file('info.csv','r').readlines()
counts = []
for i in xrange(4):
counts.append(fromstring(lines[i][:-2],sep=',')[0:-1])
Run Code Online (Sandbox Code Playgroud)
如果有人能向我解释这个代码,我将不胜感激.我似乎无法在切片上找到更高级的例子 - 只是非常简单的解释这种情况的例子.
非常感谢你.
我正在编写一个简单的shell,它接受一些标准命令,比如C中的cd和ls.我正在尝试实现一个用户可以输入";"的功能.在命令之间,以便可以在同一行上写入一堆命令并单独执行.因此,如果我输入"cd Desktop; ls",shell应该cd到Desktop并打印目录中的内容.问题是它只执行第一个命令.这是我的主要方法:
char input[1024];
while(1)
{
printf("%s ", prompt);
fgets(input, 1024, stdin);
char delims[] = ";";
char *result = NULL;
result = strtok( input, delims );
while( result != NULL )
{
printf("%s\n", result);
char * copy = malloc(strlen(result) + 1); //Create a copy of the input token
strcpy(copy, result);
format(copy);
if(programs)
{
handle();
cleanup(programs);
programs = NULL;
}
free(copy);
result = strtok( NULL, delims );
cmdno++;
}
}
Run Code Online (Sandbox Code Playgroud)
首先,我尝试将输入分解为基于";"的标记.然后将令牌提供给format()方法,如下所示:
int format(char input[])
{
input = strtok(input, "\n");
... …Run Code Online (Sandbox Code Playgroud) 我想将csv文件导入psql db ...
我搜索并尝试使用副本,也参考https://www.commandprompt.com/ppbook/r23528,我使用的语法是:
copy location from 'file.csv' with delimiters '\t' NULL as 'NULL' CSV;
Run Code Online (Sandbox Code Playgroud)
注意:我的csv文件由'tab'分隔.
在第一次执行上面的cmd后,它显示:
ERROR: syntax error at or near ""\t""
LINE 1: ...om 'file.csv' using delimiters "\t" ;
Run Code Online (Sandbox Code Playgroud)
并且第二次,
ERROR: syntax error at or near "copy"
LINE 2: copy location from 'file.csv' using d...
Run Code Online (Sandbox Code Playgroud)
编辑完成后
我第二次尝试使用,
copy location from 'file.csv' with delimiter E'\t' NULL as 'NULL' CSV;
ERROR: extra data after last expected column
CONTEXT: COPY location, line 1: "AD AD100 Canillo 42.5833 1.6667 …Run Code Online (Sandbox Code Playgroud) 我想在两个可能的分隔符"/"或"//"上将字符串拆分为List.但更重要的是,分隔符也应该放在同一个列表中.我不能用Guava中的Splitter或java.util.Scanner来做这个.
Scanner s = new Scanner(str);
s.useDelimiter("//|/");
while (s.hasNext()) {
System.out.println(s.delimiter());
System.out.println(s.next());
}
Run Code Online (Sandbox Code Playgroud)
s.delimiter()回报//|/.我想得到/或//.
你知道其他任何一个可以做到这一点的图书馆吗?
我写了一些代码,它可以工作,但它不是很好的解决方案:
public static ArrayList<String> processString(String s) {
ArrayList<String> stringList = new ArrayList<String>();
String word = "";
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '/' && i < s.length() && s.charAt(i + 1) == '/') {
if (!word.equals(""))
stringList.add(word);
stringList.add("//");
word = "";
i++;
} else if (s.charAt(i) == '/') {
if (!word.equals("")) …Run Code Online (Sandbox Code Playgroud) 我想这是一个非常简单的问题,但直到现在我都没有......我有一个像这样的列的文件:
1 2 3 4 5 3
6 7 -8 9 0 5
4 8 -4 6 -7 8
Run Code Online (Sandbox Code Playgroud)
我在python中有这个代码:
import csv
MyValues = [] #create an empty list
values = csv.reader(open('myfile', 'rb'), delimiter=' ')
for row in values:
MyValues.append(row[5] if len(row)>4 else None)
print MyValues
Run Code Online (Sandbox Code Playgroud)
问题是分隔符不仅是一个空格,有时是两个或三个空格.直到现在我无法修复,甚至使用嗅探器或方言例程...有人知道如何导入列?
我正在读取文件中的输入,其中文本由一个或多个换行符分隔.忽略我使用的空白换行 input.useDelimiter("\\n");但是由于某种原因,nextLine() - 方法读取空行而不是忽略它们.我究竟做错了什么?
编辑:假设第一行是空白换行符,第二行是字符串 "ABC"
input.useDelimiter("[\n]+");
String kjkj = input.nextLine();
System.out.println("***"+kjkj+"***");
Run Code Online (Sandbox Code Playgroud)
给出这个结果:******
而不是***ABC***
在正则表达式中这可能吗? 假设我收到了这些条目:
1005,15,0,0,0
1014,20,0,0,0
1084,3,360000,180000,1
1025,5,0,0,0
我应该拥有的是,找到一个在它之前有逗号的数字,0,0,0并且在此之后,将数字替换为其数字的140%
1005,15*1.4,0,0,0
1014,20*1.4,0,0,0
1084,3,360000,180000,1
1025,1*1.4,0,0,0
如果它有小数点,将其向上舍入1,并删除小数点,以便:
1025,1,0,0,0 => 1025,2,0,0,0
决赛应该是这样的:
1005,21,0,0,0
1014,28,0,0,0
1084,3,360000,180000,1
1025,2,0,0,0
有人可以请我正确的正则表达式查找和替换?
谢谢!
编辑:弄清楚正则表达式无法做到这一点,所以任何可以帮助我的工具?
我试图简单地使用带有分隔符等于""的scanner .next()读取文本文件中的单词,但扫描程序包含带有令牌的换行符/回车符.
我已经搜索了互联网,试图找到这个问题的一个很好的例子,但没有找到它所以我在这里发布它.我在SO上发现了另一个类似的问题.我也看了关于扫描仪和模式(文档超过http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html),但我仍然无法找到一个方法来解决这个.
文本文件:
这是一个测试
看看if1这个,是否有效
好!
码:
int i = 0;
String string;
try(Scanner scanner = new Scanner(new File(filename))) {
scanner.useDelimiter(" ");
while(scanner.hasNext())
{
string = scanner.next();
System.out.println(i++ + ": " + string);
}
}catch(IOException io_error) {
System.out.println(io_error);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0:这个
1:是
2:a
3:测试
至
4:看
5:if1
6:这个,
7:是
8:工作
好!
如您所见,#3和#8有两个单词换行.(我知道我可以将它们分成两个单独的字符串.)